安卓自定义View基础-绘制点、线、矩形、圆形等

为什么要自定义View?因为我们在开发中,经常有各种各样的需求,但是原生的控件毕竟只能满足我们常用的需求,所以我们需要根据自身当前的需求来定制我们的View,话不多说,一步一步来吧。

1.创建类:

创建一个类,暂且将这个类命名为CustomView,并继承View,此时会提示需要重载它的构造函数,我们可以看到View的构造函数如下(四种):

    public CustomView(Context context) {super(context);}
    public CustomView(Context context, @Nullable AttributeSet attrs)        
    {super(context, attrs); }
    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr)
    {super(context, attrs, defStyleAttr);}
    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) 
    {super(context, attrs, defStyleAttr, defStyleRes);}

第四个构造函数我们先不考虑,是API21添加的
第三个构造函数的第三个参数一般也用不着,暂时不看
第二个构造函数一般在layout文件中使用的时候会调用,关于它的所有属性(包括自定义属性)都会包含在attrs中传递进来。
第一个构造函数一般在直接New一个View的时候调用。

比如说:
以下情况会调用第一种构造函数:

//在Activity中
CustomView customView = new CustomView(this);

以下情况会调用第二种构造函数:

//在layout文件中 - 格式为: 包名.View名
"wrap_content"
  android:layout_height"wrap_content"/>

2.Canvas:

顾名思义,是一个画布,我们可以在画布上绘制我们想要的图形,它可以是一个点、线、矩形、圆形等。

我们先重写父类onDraw方法:

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

然后我们先试试使用cancas绘制一个背景:

//绘制红色背景
canvas.drawColor(Color.RED); 

Activity完整代码如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在Activity中
        CustomView customView = new CustomView(this);
        setContentView(customView);
    }
}

效果如下:
安卓自定义View基础-绘制点、线、矩形、圆形等_第1张图片

2.创建画笔:

/**
* 1.创建一个画笔
*/
private Paint mPaint;
/**
* 2.初始化画笔
*/
private void initPaint() {
   mPaint = new Paint();
   //设置画笔颜色
   mPaint.setColor(Color.BLACK);
   //STROKE                //描边
   //FILL                  //填充
   //FILL_AND_STROKE       //描边加填充
   //设置画笔模式
   mPaint.setStyle(Paint.Style.FILL);
   //设置画笔宽度为30px
   mPaint.setStrokeWidth(30f);
}

创建完画笔,就可以使用画笔在画布Canvas上绘制了。

3.绘制:

绘制点:

绘制一个点:

//在坐标200(X),200(Y)处绘制一个点
canvas.drawPoint(200, 200, mPaint);

绘制一组点:

//绘制一组点,坐标一一对应
canvas.drawPoints(new float[]{
         500, 500,
         500, 600,
         500, 700
}, mPaint);

效果如下:
安卓自定义View基础-绘制点、线、矩形、圆形等_第2张图片

绘制直线(两点确定一线):

//绘制一条直线(两点确定一线)
canvas.drawLine(300, 300, 500, 600, mPaint);
//绘制一组线
canvas.drawLines(new float[]{
        100,800,500,800,
        100,1000,500,1000
},mPaint);

效果如下:
安卓自定义View基础-绘制点、线、矩形、圆形等_第3张图片

绘制矩形:

//第一种:
canvas.drawRect(100, 100, 800, 400, mPaint);
//第二种:
canvas.drawRect(new Rect(100, 100, 800, 400), mPaint);
//第三种:Rect和RectF的区别就是一个是int一个是浮点型
canvas.drawRect(new RectF(100, 100, 800, 400), mPaint);

效果如下:
安卓自定义View基础-绘制点、线、矩形、圆形等_第4张图片

绘制圆形矩形:

//第一种:rx 80 ry 70
canvas.drawRoundRect(new RectF(100, 100, 800, 400), 80, 70, mPaint);
//第二种://必须>=API21
canvas.drawRoundRect(100,100,800,400,30,30,mPaint);

效果如下:
安卓自定义View基础-绘制点、线、矩形、圆形等_第5张图片

绘制椭圆:

//第一种:
canvas.drawOval(new RectF(100, 100, 800, 400), mPaint);
//第二种:
canvas.drawOval(100, 100, 800, 400, mPaint);

效果如下:
安卓自定义View基础-绘制点、线、矩形、圆形等_第6张图片

绘制圆形:

//绘制圆形:圆心坐标在500*500,半径是400
canvas.drawCircle(500, 500, 400, mPaint);

效果如下:
安卓自定义View基础-绘制点、线、矩形、圆形等_第7张图片

绘制圆弧:

//第一种:起始角度为0度,扫过90度的圆弧  false不使用中心点
canvas.drawArc(new RectF(100, 100, 600, 600), 0, 90, false, mPaint);
//第二种:起始角度为0度,扫过90度的圆弧  true使用中心点
canvas.drawArc(new RectF(100, 100, 600, 600), 0, 90, true, mPaint);

效果如下:

false不使用中心点:
安卓自定义View基础-绘制点、线、矩形、圆形等_第8张图片
true使用中心点:
安卓自定义View基础-绘制点、线、矩形、圆形等_第9张图片

总结:

上述全部是自定义View的基本用法,但是我相信那些复杂的View也是通过基础来构思的,慢慢来吧。

源码下载

你可能感兴趣的:(Android,android,自定义view,基础)