安卓自定义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名
<com.zmj.study.CustomView
  android:layout_width"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);
    }
}

效果如下:

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);

效果如下:

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

效果如下:

绘制矩形:
//第一种:
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);

效果如下:

绘制圆形矩形:
//第一种: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);

效果如下:

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

效果如下:

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

效果如下:

绘制圆弧:
//第一种:起始角度为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不使用中心点:

true使用中心点:

总结:

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

源码下载

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值