您的位置:首页 > 其它

自定义view之圆形头像(2种实现方式)

2015-11-12 17:04 375 查看
先上个图



下面具体讲解2种方式

一、PorterDuffXfermode

这个在上篇文章中有具体讲到,还用这个实现了一个刮刮卡,其实想想,用这个也能实现。

先画一个圆,接着把图盖上去,用PorterDuff.Mode.SRC_IN合并,OK。

mBitmap = BitmapFactory.decodeResource(getResources(),
R.mipmap.beauty);
mOut = Bitmap.createBitmap(mBitmap.getWidth(),
mBitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(mOut);
mPaint = new Paint();
mPaint.setAntiAlias(true);
canvas.drawCircle(300, 150,
100,
mPaint);
mPaint.setXfermode(new PorterDuffXfermode(
PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(mBitmap, 0, 0, mPaint);


二、Shader渲染器

Shader又被称为着色器、渲染器,主要用来实现一些列的渐变、渲染效果。Android中的Shader包括以下几种:

BitmapShader——位图

LinearGradient——线性

RadialGrdient——光束

SweepGradient——梯度

ComposeShader——混合

除了第一个shader意外,其他的Shader都比较正常。而与其他的Shader所产生的渐变不同,BitmapShader产生的是一个图像,这个有点像Photoshop中的图像填充渐变。他的作用就是通过Paint对画布进行指定的Bitmap的填充,填充有以下几个模式可以选择。

CLAMP重复最后一个颜色至最后

MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果

REPEAT重复着色的图像水平或垂直方向

简单介绍完之后,我们直接看是如何实现的:

mBitmap = BitmapFactory.decodeResource(getResources(),
R.mipmap.beauty);
mBitmapShader = new BitmapShader(mBitmap,
Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
mPaint = new Paint();
mPaint.setShader(mBitmapShader);
canvas.drawCircle(300, 150, 100, mPaint);


以上代码中,用一张图片创建了一支具有图像填充功能的画笔,并使用这个画笔绘制了一个圆形。这样,我们就看见了一个圆形的图形。

简简单单的几行代码,就实现了圆形头像,之前记得有个圆形头像的实现,github上面比较流行的一套代码

https://github.com/hdodenhof/CircleImageView

大家可以看一下CircleImageView的源码会发现,原理用的就是这个BitmapShader。

对于CircleImageView,具体可以参考牛人们写的一篇文章

http://toughcoder.net/blog/2015/08/25/understanding-circleimageview/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: