android 缺半圆形头像,圆形头像设计

现在的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/...

获取缩放值

图片过大与过小都不好,不可能绝对的适中,所以缩放值的获取是最重要的。我们要比较图片宽高与控件宽高,通过错位相乘来比较图片的宽高哪个与控件的宽高相差更大。取相差大的值进行比较得到缩放值。下面是主要实现代码:

mDrawableRec.set(0, 0, getWidth(), getHeight());

if (mBitmapWidth * mDrawableRec.height() > mDrawableRec.width() * mBitmapheight) {

scal = mDrawableRec.height() / mBitmapheight;

} else {

scal = mDrawableRec.width() / mBitmapWidth;

}

设置BitmapShader

mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

mPaint.setShader(mBitmapShader);

设置缩放与矩阵

mMatrix.setScale(scal, scal);

mBitmapShader.setLocalMatrix(mMatrix);

onDraw绘制

@Override

protected void onDraw(Canvas canvas) {

if (mBitmap == null) {

return;

}

//填充

canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mRadius, mFillPaint);

canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mRadius, mPaint);

//描边

if (mStrokeWidth != 0)

canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mRadius, mBorderPaint);

}

这里的顺序不要打乱,否则回影响图片原有的颜色效果

好了主要的实现方法就是这些了,其实只要理解上面的就基本上掌握了圆形头像的设置了。

对外方法

setBorderColor(); 设置边界颜色

setFillColor(); 填充颜色

setStrokeWidth(); 描边宽度

引用

使用的话直接在xml文件中使用自己自定义的CircleImageView控件,

注意:如果要在xml中设置默认显示图片时不要使用background设置,否则可能会出差错,使用src就不会有问题了。

效果图

bVtEWk?w=551&h=810

关注

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值