转载请注明出处:http://blog.csdn.net/binbinqq86/article/details/78329238
项目中要用到一个聊天头像的控件,跟钉钉的类似的这种,于是乎自己就想撸一个出来,虽然网上也有现成的,但别人的总是需要修修改改,还不如自己从头开始,也方便后续维护,直接看效果图:
怎么样,还不错吧,哈哈~自我感觉良好,唯一不同的是钉钉两个人和三个人是左右横排的,我们的是竖排的。下面我们来简单分析一下实现原理:
首先抛开图片不说,先看底色+昵称,底色就很简单了,根据用户的唯一id,来指定一个规则,进行显示不同的颜色,这个看产品具体来定了,整体就采用canvas的drawCircle、drawArc、drawText等方法来绘制了,看看应该是挺容易的,难点就是具体的坐标计算,只要算准位置,这个自定义view就是分分钟了,哈哈~再来分析一下有图片的情况,图片的绘制当然就是drawBitmap了,另外再加上Xfermode这个强大的效果处理(请参考我上一篇文章—— Canvas的drawBitmap以及Paint的PorterDuffXfermode使用心得),也是分分钟实现我们想要的不规则图片绘制。好了,原理分析完了,下面直接上代码,核心部分就是我们的onDraw方法了:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (count == 0) {
return;
}
//必须先设置字体大小
if (count == 1) {