您好我正在阅读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变量才足以做到这一点?
答案 0 :(得分:3)
在{i}}方法上执行onDraw
方法。虽然我们无法访问UI线程(您不希望经常使用UI线程),但我们保留了屏幕外 Bitmap
Canvas
我们用来绘制它。
为什么这样?这是因为它允许我们专注于绘图/处理,而不必担心阻塞UI线程。
注意:调用方法invalidate
(或postInvalidate
)不会立即阻止并调用onDraw
- 它只是与操作系统进行绘制调用排队