public class CircleImageView extends ImageView{
int borderColor;
int borderWidth;
public CircleImageView(Context context) {
this(context,null);
// TODO Auto-generated constructor stub
}
public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context,attrs);
// TODO Auto-generated constructor stub
}
public CircleImageView(Context context, AttributeSet attrs) {
this(context, attrs,0);
// TODO Auto-generated constructor stub
}
private void initView(Context context, AttributeSet attrs) {
// TODO Auto-generated method stub
TypedArray t=context.obtainStyledAttributes(attrs, R.styleable.CircleImageView);
int borderColor=t.getColor(R.styleable.CircleImageView_border_color, Color.WHITE);
int borderWidth=(int) t.getDimension(R.styleable.CircleImageView_border_width, 2);
t.recycle();//记得释放
}
/**
* 将作为参数传入方形的Bitmap对象
* 变成圆形的bitmap对象
* 然后画到组件上
*
*/
public void setCircleImageBitmap(Bitmap bitmap){
/**
* 获取imageview的宽和高
*/
int width=getWidth();
int height=getHeight();
/**
*手动获取width为80dp对应的px值
*手动获取height为80dp对应的px值
*/
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 , width/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, width/2-borderWidth, p);
setScaleType(ScaleType.CENTER);
super.setImageBitmap(bm);
int borderColor;
int borderWidth;
public CircleImageView(Context context) {
this(context,null);
// TODO Auto-generated constructor stub
}
public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context,attrs);
// TODO Auto-generated constructor stub
}
public CircleImageView(Context context, AttributeSet attrs) {
this(context, attrs,0);
// TODO Auto-generated constructor stub
}
private void initView(Context context, AttributeSet attrs) {
// TODO Auto-generated method stub
TypedArray t=context.obtainStyledAttributes(attrs, R.styleable.CircleImageView);
int borderColor=t.getColor(R.styleable.CircleImageView_border_color, Color.WHITE);
int borderWidth=(int) t.getDimension(R.styleable.CircleImageView_border_width, 2);
t.recycle();//记得释放
}
/**
* 将作为参数传入方形的Bitmap对象
* 变成圆形的bitmap对象
* 然后画到组件上
*
*/
public void setCircleImageBitmap(Bitmap bitmap){
/**
* 获取imageview的宽和高
*/
int width=getWidth();
int height=getHeight();
/**
*手动获取width为80dp对应的px值
*手动获取height为80dp对应的px值
*/
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 , width/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, width/2-borderWidth, p);
setScaleType(ScaleType.CENTER);
super.setImageBitmap(bm);