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

来源:互联网 发布:轩辕剑崆峒印进阶数据 编辑:程序博客网 时间:2024/06/03 20:00

为什么要自定义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方法:

@Overrideprotected 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 70canvas.drawRoundRect(new RectF(100, 100, 800, 400), 80, 70, mPaint);//第二种://必须>=API21canvas.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,半径是400canvas.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也是通过基础来构思的,慢慢来吧。

源码下载

0 0