Android实现圆形ImageView

来源:互联网 发布:java程序设计大学课本 编辑:程序博客网 时间:2024/05/29 09:45

项目需要,我需要画一个圆形的ImageView,在网上找了很多资料后,终于发现了一个简单实用的自定义图形,分享一下:

继承自ImageView类

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;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 stubinit();}public CircleImageView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubinit();}public CircleImageView(Context context) {super(context);// TODO Auto-generated constructor stubinit();}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);}@Overrideprotected void onDraw(Canvas cns) {// TODO Auto-generated method stubfloat 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);}}

效果:



原创粉丝点击