使用Canvas的Android FingerPaint示例,什么是屏幕外的画布?

时间:2011-08-25 12:33:35

标签: android android-canvas

您好我正在阅读fingerpaint示例,因为我正在构建一个签名活动,允许用户在手机上绘制签名,然后将其保存到SD。

到目前为止,我已经看到mPath变量保存了用户当前绘制的路径,并且通过调用

将此路径绘制到onDraw(..)方法的屏幕上
canvas.drawPath(mPath, mPaint);

然而,在该示例中,还有另一个画布“mCanvas”在触摸侦听器上绘制路径:

private void touch_up() {
    mPath.lineTo(mX, mY);
    // commit the path to our offscreen
    mCanvas.drawPath(mPath, mPaint);
    // kill this so we don't double draw
    mPath.reset();
}

这是我没有得到的。这个mCanvas对象究竟是什么,为什么他们在这个例子中使用它,似乎只有onDraw方法的常规画布和mPath变量才足以做到这一点?

1 个答案:

答案 0 :(得分:3)

在{i}}方法上执行onDraw方法。虽然我们无法访问UI线程(您不希望经常使用UI线程),但我们保留了屏幕外 Bitmap Canvas我们用来绘制它。

为什么这样?这是因为它允许我们专注于绘图/处理,而不必担心阻塞UI线程。

注意:调用方法invalidate(或postInvalidate)不会立即阻止并调用onDraw - 它只是与操作系统进行绘制调用排队