sky-mxc 总结 转载注明https://sky-mxc.github.io
自定义圆形ImageView
圆形ImageView在头像显示用的比较普遍了,今天对于实现圆形ImageView做个总结;
主要思路是 重写 onDraw() ;方法有两个:
- 使用paint的Shader(着色器)将图片印在一个圆的画板上
- 使用Bitmap创建一个空的Canvas(画板),在画板上画一个圆和显示的图片,paint图像混合模式显示
着色器 方式
不带边框
思路
- 将图片压缩到和控件的大小一致
- 创建Bitmap 着色器
- 创建画笔并设置着色器
- 使用带有着色器的画笔在画板上画圆
1 | private void drawShader(Canvas canvas) { |
效果

加边框
有时候我们需要为头像加上一个圆的边框显得更好看一点,其实这个也很好实现,在绘制图片之前先绘制一个带有颜色的圆,根据边框的大小,将图片缩小一点,这样就将边框显示出来了。
画边框
1 | paint = new Paint(Paint.ANTI_ALIAS_FLAG); |
绘制图片 将边框大小空出来 (getWidth()-outWidth*2)/2
1 | private void drawShader(Canvas canvas) { |
效果

着色器方式全部代码
自定义属性 边框颜色和宽度
1 | <?xml version="1.0" encoding="utf-8"?> |
重写 onDraw() 绘制图片
1 | package com.skymxc.lesson_36_view_override; |
使用图片混合模式显示
创建 Bitmap 使用图片混合模式 将图片和圆形交叉显示
1 | private Bitmap getCircleBitmap(){ |
1 |
|
对于这种方式的实现主要在于 paint 的交叉模式; PorterDuffXfermode
实现的方式有很多种 目前是两种. 未完待续。。。。。