Android自定义圆形头像

第一次写博客,好紧张~
因为网上自定义的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!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值