关闭

自定义View

标签: 控件imageview自定义
84人阅读 评论(0) 收藏 举报
分类:
自定义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);
    }       
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15773次
    • 积分:356
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:5篇
    • 译文:0篇
    • 评论:13条
    最新评论