您的位置:首页 > 其它

圆形图片

2016-05-04 19:38 330 查看
package com.baidu.image;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Paint;

import android.graphics.PorterDuff.Mode;

import android.graphics.PorterDuffXfermode;

import android.graphics.Rect;

import android.graphics.Bitmap.Config;

import android.graphics.Canvas;

import android.graphics.drawable.BitmapDrawable;

import android.graphics.drawable.Drawable;

import android.util.AttributeSet;

import android.widget.ImageView;

public class RoundImageView extends ImageView {

//生成三个构造方法

public RoundImageView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

public RoundImageView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public RoundImageView(Context context) {

super(context);

}

//重写OnDraw方法

@Override

protected void onDraw(Canvas canvas) {

//获得系统的图片

Drawable drawable=getDrawable();

//如果是空 那么返回空

if (drawable==null) {

return;

}

//如果宽度和高度为0那么无效果图不显示

if (getWidth()==0||getHeight()==0) {

return;

}

//将drawable图片转化成BitMap类型

Bitmap bitmap=((BitmapDrawable) drawable).getBitmap();

if (bitmap==null) {

return;

}

//从一个drawable对象复制出来一个bitmap

//设置图片背景为透明

Bitmap bitmap1=bitmap.copy(Bitmap.Config.ARGB_8888, true);

int w=getWidth();

Bitmap roundbitmap= getCroppedBitmap(bitmap1, w);//调用方法 返回的是一个Bitmap

canvas.drawBitmap(roundbitmap, 0,0, null);//实现画一个圆图片

}

//返回的是一张图片

public static Bitmap getCroppedBitmap(Bitmap bmp, int radius){

//定义图片为空

Bitmap sbmp;

if (bmp.getWidth()!=radius||bmp.getHeight()!=radius)

sbmp=Bitmap.createScaledBitmap(bmp, radius, radius, false);

else

sbmp=bmp;

//将drawable类型的图片转化成bitmap

Bitmap output=Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(), Config.ARGB_8888);

//展示在画布上

Canvas canvas=new Canvas(output);

//定义画笔

final Paint paint=new Paint();

final Rect rect=new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());

paint.setAntiAlias(true);

paint.setFilterBitmap(true);

paint.setDither(true);

//画圆 叠加图片

canvas.drawCircle(sbmp.getWidth()/2+0.7f, sbmp.getHeight()/2+0.7f, sbmp.getWidth()/2+0.1f, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

canvas.drawBitmap(sbmp, rect, rect, paint);

return output;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: