自定义View

自定义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);
    }       
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值