详解ondraw函数

发布时间:2023-05-21

一、助你快速了解ondraw函数

在Android中,每个View都包含了一些基本的方法,其中之一便是ondraw方法。它是在View想要绘制它自己或者它的子元素时调用的。在重绘自己或者在UI更新时,view会调用ondraw方法来绘制自己在Canvas上,绘制完成后,图像会被交给framework显示在屏幕上。 所以,简单来说onDraw是我们重新绘制Bitmap的主要方法,如果我们想要直接绘制出Bitmap的话,需要在继承自View的类中重写onDraw

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 绘制Bitmap
        canvas.drawBitmap(bitmap, 0, 0, null);
    }

二、ondraw与canvas的使用

Canvas是Android提供的2D图形渲染引擎,而画布Canvas则是他们之间的桥梁,它为我们提供了很多工具函数,并且可以帮助我们完成绘制工作。在ondraw方法中,我们可以使用画布作为参数进行一些绘图操作。 下面是一个简单的例子,其中包括了创建Bitmap和Canvas的过程,并且在ondraw函数中将Bitmap画到Canvas上:

    Bitmap bitmap;
    Canvas canvas;
    public MyView(Context context) {
        super(context);
        // 创建Bitmap
        bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
        // 创建Canvas
        canvas = new Canvas(bitmap);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 绘制Bitmap
        canvas.drawBitmap(bitmap, 0, 0, null);
    }

三、常用绘制函数

在Canvas中,我们可以使用不同的绘制函数进行不同的绘制操作。下面是一些常用的绘制函数:

  • drawColor(int color): 绘制单个颜色
  • drawBitmap(Bitmap bitmap, float left, float top, Paint paint): 绘制bitmap
  • drawText(CharSequence text, float x, float y, Paint paint): 绘制文本
  • drawRect(RectF rect, Paint paint): 绘制矩形
  • drawLine(float startX, float startY, float stopX, float stopY, Paint paint): 绘制线
  • drawCircle(float cx, float cy, float radius, Paint paint): 绘制圆

四、使用Path进行自定义绘制

Path是Canvas中的一个类,它用来绘制几何图形。此外,Path也可以使用线性和曲线的路径来作为几何图形的基础。 我们可以在继承自View的类中,使用Path来进行自定义绘制。下面是一段示例代码:

private Paint paint;
private Path path;
public MyView(Context context) {
    super(context);
    paint = new Paint();
    paint.setColor(Color.RED);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(10);
    path = new Path();
}
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    path.moveTo(0, 0);
    path.lineTo(100, 100);
    path.lineTo(200, 50);
    path.lineTo(300, 150);
    path.lineTo(400, 100);
    path.lineTo(500, 200);
    path.lineTo(600, 150);
    path.lineTo(700, 250);
    canvas.drawPath(path, paint);
}

五、onDraw的调用时机和使用场景

ondraw方法是View刷新UI的重要环节,在使用过程中需要注意以下几点:

  • 当View显示在屏幕上时,ondraw函数会被自动调用
  • 当View需要重新渲染时,ondraw函数也会被自动调用
  • onDraw通常用于绘制自定义的UI元素,例如自定义的Button、自定义的ProgressBar等等

六、总结

在Android中,ondraw函数是非常重要的一个函数。通过对ondraw函数的理解和使用,我们可以更加深入地了解到Android的UI渲染过程,也可以更灵活地实现自己的UI效果。