现在的App头像大部分都是圆形的了,虽然不知道这趋势是怎么流行起来的,但作为一个Android开发人员还是要随着潮流前进。所以自己就研究了一下圆形头像的制作,虽然也有这方面的开源库,但自己懂得原理还是很重要的。这里我就分享下自己的所得,不足之处欢迎指教。
原理
圆形头像嘛说到底就是张图片,所以自定义圆形图片控件自然要继承Android原生的ImgaeView,实现其中的setImageBitmap,setImageDrawable,setImageURI,setImageResource的方法。当然主要的onDraw方法也不能缺少,在其中要实现圆形头像的绘制。这里还要借助两个主要的类Matrix与BitmapShader,通过这两个类实现图片的缩放效果。
BitmapShader解释
BitmapShader有三个参数
- bitmap - The bitmap to use inside the shader
- tileX - The tiling mode for x to draw the bitmap in.
- tileY - The tiling mode for y to draw the bitmap in.
tileX与tileY都是Shader.TileMode类型,有三个选择值
- CLAMP 拉伸
- PEREAT 重复
- MIRROR 镜像
我们这里只要使用CLAMP就可以了,想知道其它的选择值的具体效果可以参考这个链接:http://blog.csdn.net/sjf0115/article/details/7267532
获取缩放值
图片过大与过小都不好,不可能绝对的适中,所以缩放值的获取是最重要的。我们要比较图片宽高与控件宽高,通过错位相乘来比较图片的宽高哪个与控件的宽高相差更大。取相差大的值进行比较得到缩放值。下面是主要实现代码:
|
|
设置BitmapShader
|
|
设置缩放与矩阵
|
|
onDraw绘制
|
|
这里的顺序不要打乱,否则回影响图片原有的颜色效果
好了主要的实现方法就是这些了,其实只要理解上面的就基本上掌握了圆形头像的设置了。
对外方法
- setBorderColor(); 设置边界颜色
- setFillColor(); 填充颜色
- setStrokeWidth(); 描边宽度
引用
使用的话直接在xml文件中使用自己自定义的CircleImageView控件,
注意:如果要在xml中设置默认显示图片时不要使用background设置,否则可能会出差错,使用src就不会有问题了。
效果图
更多源码:https://github.com/idisfkj/CircleImageView
转载请指明出处 idisfkj博客:https://idisfkj.github.io