自定义view之圆形头像(2种实现方式)
2015-11-12 17:04
375 查看
先上个图
下面具体讲解2种方式
一、PorterDuffXfermode
这个在上篇文章中有具体讲到,还用这个实现了一个刮刮卡,其实想想,用这个也能实现。
先画一个圆,接着把图盖上去,用PorterDuff.Mode.SRC_IN合并,OK。
二、Shader渲染器
Shader又被称为着色器、渲染器,主要用来实现一些列的渐变、渲染效果。Android中的Shader包括以下几种:
BitmapShader——位图
LinearGradient——线性
RadialGrdient——光束
SweepGradient——梯度
ComposeShader——混合
除了第一个shader意外,其他的Shader都比较正常。而与其他的Shader所产生的渐变不同,BitmapShader产生的是一个图像,这个有点像Photoshop中的图像填充渐变。他的作用就是通过Paint对画布进行指定的Bitmap的填充,填充有以下几个模式可以选择。
CLAMP重复最后一个颜色至最后
MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果
REPEAT重复着色的图像水平或垂直方向
简单介绍完之后,我们直接看是如何实现的:
以上代码中,用一张图片创建了一支具有图像填充功能的画笔,并使用这个画笔绘制了一个圆形。这样,我们就看见了一个圆形的图形。
简简单单的几行代码,就实现了圆形头像,之前记得有个圆形头像的实现,github上面比较流行的一套代码
https://github.com/hdodenhof/CircleImageView
大家可以看一下CircleImageView的源码会发现,原理用的就是这个BitmapShader。
对于CircleImageView,具体可以参考牛人们写的一篇文章
http://toughcoder.net/blog/2015/08/25/understanding-circleimageview/
下面具体讲解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/
相关文章推荐
- IOS如何选择图片加载方式:imageNamed和imageWithContentsOfFile的区别
- Ubuntu14.04安装chrome
- 我觉得比较好的资源站
- 通过RS232发送和接收短信(三)
- 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)
- 通过RS232发送和接收短信(三)
- 坑爹的golang日期时间格式format()
- php中清除数组的某个单元
- muduo库阅读(42)——Net部分:TCP客户端TcpClient
- 插入排序—直接插入
- Java中String为什么是Immutable的
- 利用Spring MVC 上传图片文件 博客分类: Java总结文档
- ArcGis for WPF(1)
- iOS开发-清理缓存功能的实现
- 健壮且可读的安卓架构设计
- PHP人们币金额小写转大写类库
- SpringMVC 解读——<mvc:annotation-driven/>
- 关于Unity3d中的LayerMask使用
- xmpp
- DOM(文档对象模型)解析原理