第一次写博客,好紧张~
因为网上自定义的ImageView太多了,如有雷同,纯属心有灵犀(*  ̄3)(ε ̄ *)
在Android开发的过程中,会经常遇到需要吧图片处理成圆形的,以前我碰到这种需求一般都死在网上搜索一个Demo,对具体的实现过程往往不求甚解,但是慢慢的发现这种做法并不好,根基不牢,地动山摇啊。好了,废话不多说,开始:
其实要想自己实现一个圆形头像非常简单
public class ImageManagerView extends ImageView {
public ImageManagerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setImageBitmap(Bitmap bm) {
super.setImageBitmap(createCircleBitmap(bm));
}
/**
* 创建圆形图片
* @param bm
* @return
*/
private Bitmap createCircleBitmap(Bitmap bm) {
/**
* 获取图片的宽高
*/
int width = bm.getWidth();
int height = bm.getHeight();
/**
* 新建一个空白的位图
*/
Bitmap localBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
/**
* 创建一个新的画布设置抗锯齿
*/
Canvas localCanvas = new Canvas(localBitmap);
localCanvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));
/**
* 新建一个画笔和设置抗锯齿属性
*/
Paint localPaint = new Paint();
localPaint.setAntiAlias(true);
/**
* 创建一个和设置图片大小相同的巨型区域
*/
RectF localRectF = new RectF(0.0F, 0.0F, width, height);
/**
* 在画布上绘制一个圆形的区域
*/
localCanvas.drawRoundRect(localRectF, width, height, localPaint);
/**
* 设置两张图片相交时的模式--取两层绘制交集,显示上层。
* 如果不了解,请参考:http://www.cnblogs.com/rayray/p/3670120.html
*/
localPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
/**
* 把要加载的图片放大画布上
*/
localCanvas.drawBitmap(bm, 0, 0, localPaint);
/**
* 返回最后合成的图片
*/
return localBitmap;
}
}
只需要这么几步,一个自定义的圆形ImageView就做好了,使用起来和系统自带的ImageView没有任何区别,因为这里我只重写了一个setImageBitmap的方法,所以只有调这个借口才回显示圆角头像,并且如果传入宽高不相等的图片,生成的椭圆行,我这里并没有处理,希望用的时候注意一下。
这么快就写完了,心里有点小鸡冻啊~,虽然是很容易的东西,但是还是有点小小的成就感,各位大神莫笑我,可能是第一次写博客吧O(∩_∩)O~
关于圆形图片的解决方法,网上的实现有太多太多,而我还要写,最重要的还是对自己学习生活的记录,对自己的勉励,DayDayUp!