最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
android实现圆形imageView,CircleimageView.
时间:2026-08-20 20:35:49 编辑:袖梨 来源:一聚教程网
设计给出了一个圆圈形显示网络图片的方案,无奈,程序猿只好写了一个,现共享出来,代码很简单。
类直接继承自ImageView,修改下他的canvas就行了;
package cn.helloclq.android.widget;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Path;
import android.graphics.Region;
import android.util.AttributeSet;
import android.widget.ImageView;
/
*
* android circle imageView
* @author Block Cheng
*
*/
public class CircleImageView extends ImageView {
Path path;
public PaintFlagsDrawFilter mPaintFlagsDrawFilter;// 毛边过滤
Paint paint;
public CircleImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
init();
}
public CircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
init();
}
public CircleImageView(Context context) {
super(context);
// TODO Auto-generated constructor stub
init();
}
public void init(){
mPaintFlagsDrawFilter = new PaintFlagsDrawFilter(0,
Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setColor(Color.WHITE);
}
@Override
protected void onDraw(Canvas cns) {
// TODO Auto-generated method stub
float h = getMeasuredHeight()- 3.0f;
float w = getMeasuredWidth()- 3.0f;
if (path == null) {
path = new Path();
path.addCircle(
w/2.0f
, h/2.0f
, (float) Math.min(w/2.0f, (h / 2.0))
, Path.Direction.CCW);
path.close();
}
cns.drawCircle(w/2.0f, h/2.0f, Math.min(w/2.0f, h / 2.0f) + 1.5f, paint);
int saveCount = cns.getSaveCount();
cns.save();
cns.setDrawFilter(mPaintFlagsDrawFilter);
cns.clipPath(path,Region.Op.REPLACE);
cns.setDrawFilter(mPaintFlagsDrawFilter);
cns.drawColor(Color.WHITE);
super.onDraw(cns);
cns.restoreToCount(saveCount);
}
}
原图片: 

放到代码中测试运行

说明:该类对图片的裁剪,导致了轻微的毛边出来,采用网络上的方法处理了,效果不佳,详见代码中的filter。
但如果服务器的图片是纯色背景,这个问题就不是问题了。我也不深入研究了,后面还有很重的任务。
另外,裁剪出圆形图片也是利用相似的原理实现。
如果哪位朋友有好的解决方法,欢迎分享给我,万分谢谢。
相关文章
- 小米ax6000刷openwrt教程(小米ax6000如何刷openwrt) 08-20
- BlackHole开发日志--防止DNS污染 08-20
- 如何顺利将CDR文件转换为AI格式,轻松解决设计兼容性问题 08-20
- 别克至境L7纯电版上市!15.59万起享超长续航与豪华配置新体验 08-20
- 用solr的facet实现聚合标签 08-20
- 阶跃AI-阶跃星辰推出的支持多模态的AI聊天机器人 08-20