您的位置:首页 > 其它

画出一个圆圈的imageview

2016-03-05 10:40 357 查看
现在很多头像都是圆圆的,这种自定义view的实现可以通过一下代买来实现,java代码如下:

public class CircleImageView  extends ImageView{
int borderColor;
int borderWidth;
public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context,attrs);
}

private void init(Context context, AttributeSet attrs) {
TypedArray t=context.obtainStyledAttributes(attrs, R.styleable.CircleImageView);
borderColor=t.getColor(R.styleable.CircleImageView_border_color, Color.WHITE);
borderWidth=t.getDimensionPixelSize(R.styleable.CircleImageView_border_width, 2);
t.recycle();
}

public CircleImageView(Context context, AttributeSet attrs) {
this(context,attrs,0);
}

public CircleImageView(Context context) {
this(context,null);
}
public void setCircleImageBitmap(Bitmap bitmap){
int width=getWidth();
int height=getHeight();
if(width==0||height==0){
width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
80, getResources().getDisplayMetrics());
height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
80, getResources().getDisplayMetrics());
}
bitmap=Bitmap.createScaledBitmap(bitmap, width, height, true);

Bitmap bm=Bitmap.createBitmap(width,height,bitmap.getConfig());
Canvas c=new Canvas(bm);

Paint p= new Paint(Paint.ANTI_ALIAS_FLAG);
float radius=Math.min(width, height);
c.drawCircle(width/2, height/2, radius/2-borderWidth, p);
p.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
c.drawBitmap(bitmap, 0,0, p);
p.reset();
p.setAntiAlias(true);
p.setStyle(Style.STROKE);
p.setColor(borderColor);
p.setStrokeWidth(borderWidth);
c.drawCircle(width/2, height/2, radius/2-borderWidth, p);

setScaleType(ScaleType.CENTER);
super.setImageBitmap(bm);
}

}

其中使用到的xml属性设置如下,xml代码如下:

<resources>

  <declare-styleable name="CircleImageView">

     <attr name="border_color" format="color"></attr>

     <attr name="border_width" format="dimension"></attr>

  </declare-styleable>  

</resources>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  imageview