效果
关键代码分析
1.定义paint
paint = new Paint();
paint.setAntiAlias(true);
2.使用图片来渲染paint
BitmapShader shader = new BitmapShader(
Bitmap.createScaledBitmap(image, canvasSize, canvasSize, false),
Shader.TileMode.CLAMP,
Shader.TileMode.CLAMP);
paint.setShader(shader);
3.利用RadialGradient的模糊效果和综合shader来渲染模糊的效果:
RadialGradient radialGradient = new RadialGradient(
circleCenter,
circleCenter,
circleCenter,
mColors,
mPositions,
Shader.TileMode.CLAMP);
ComposeShader composeShader = new ComposeShader(
shader,
radialGradient,
PorterDuff.Mode.SRC_OVER);
paint.setShader(composeShader);
4.使用paint来画形状
画圆角矩形:
canvas.drawRoundRect(
new RectF(
roundRectPadding,
roundRectPadding,
canvasSize-roundRectPadding,
canvasSize-roundRectPadding),
roundRectXRadius,
roundRectYRadius,
paint);
画圆:
canvas.drawCircle(
circleCenter + borderWidth,
circleCenter + borderWidth,
((canvasSize - (borderWidth * 2)) / 2) - 4.0f,
paint);
参考资料
1.CircularImageView
https://github.com/lopspower/CircularImageView
2.circle and round rect image
https://github.com/hfreeman2008/AndroidDemo
3.Paint、Canvas、Matrix使用讲解(一、Paint)
http://blog.youkuaiyun.com/tianjian4592/article/details/44336949