自定义View,就是这个View上所呈现的内容全部都是我们自己绘制出来的.
自定义view的三个重要方法:
onMeasure()//初步确定控件尺寸
onLayout()//决定子控件如何摆放
onDraw()//继承自view则需要重写
public class CircleView extends ImageView{
int borderwidth;
int bordercolor;
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray t=context.obtainStyledAttributes( attrs, R.styleable.CircleView);
borderwidth=t.getDimensionPixelSize(R.styleable.CircleView_border_width, 0);
bordercolor=t.getColor(R.styleable.CircleView_border_color,Color.WHITE);
t.recycle();
}
/**
*改写ImageView默认的serImageBitmap方法
*/
@Override
public void setImageBitmap(Bitmap bm) {
Bitmap bitmap=Bitmap.createBitmap(bm.getWidth(),
bm.getHeight(),Config.ARGB_8888);
Canvas canvas=new Canvas(bitmap);
Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);//抗锯齿
//设置画笔颜色
paint.setColor(Color.BLACK);
//设置半径
float radius=Math.min(bm.getWidth(), bm.getHeight())/2;
//画圆
canvas.drawCircle(bm.getWidth()/2, bm.getHeight()/2, radius, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bm, 0,0, paint);
//描边
paint.setStyle(Style.STROKE);//设置类型为空心
paint.setStrokeWidth(borderwidth);
paint.setColor(bordercolor);
canvas.drawCircle(bm.getWidth()/2, bm.getHeight()/2, radius-borderwidth/2, paint);
setScaleType(ScaleType.FIT_XY);
super.setImageBitmap(bitmap);
}
}