自定义View之Paint、RectF

152 阅读1分钟

先上效果图:

WechatIMG37.jpeg
private Paint paint;

public MyView(Context context) {
    this(context, null);
}

public MyView(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, 0);
}

public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);

    paint = new Paint();
    paint.setColor(context.getResources().getColor(R.color.yellow_ffd700));
    //Style 具体来说有三种:
    // FILL, STROKE 和 FILL_AND_STROKE 。
    // FILL 是填充模式,
    // STROKE 是画线模式(即勾边模式),
    // FILL_AND_STROKE 是两种模式一并使用:既画线又填充。它的默认值是 FILL,填充模式。
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(100);//描边  占据绘画图形以外的空间,占width/2
    paint.setAntiAlias(true);//抗锯齿

}

以上代码除了注意Paint的基本设置,还需关注自定义View重写的三个构造方法,第一个是代码new对象时候调用,第二个是布局文件中时候调用,第三个是布局文件中有style属性时候调用。1调2调3,具体处理都放在第三个构造函数。

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    paint.setStyle(Paint.Style.FILL);
    canvas.drawCircle(500, 800, 300, paint);

    paint.setStyle(Paint.Style.FILL);
    canvas.drawRect(100, 100, 200, 250, paint);

    paint.setStyle(Paint.Style.STROKE);
    canvas.drawRect(300, 100, 400, 200, paint);

    paint.setStyle(Paint.Style.FILL_AND_STROKE);
    //800,100确定左上角,距离左边800,上面100
    //900,200确定右下角,距离左边900,上面200
    RectF rectF = new RectF(800, 100, 900, 200);
    canvas.drawRect(rectF, paint);
}