- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
嗨,我正在阅读 fingerpaint例如,因为我正在构建一个签名 Activity ,它允许用户在手机上画一个签名,然后将其保存到 SD。
到目前为止,我已经看到 mPath 变量保存了用户当前正在绘制的路径,并且通过调用 onDraw(..) 方法将此路径绘制到屏幕上
canvas.drawPath(mPath, mPaint);
但是在示例中还有另一个 Canvas “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 方法的常规 Canvas 和 mPath 变量就足够了?
最佳答案
onDraw
方法在 UI 线程上执行。虽然我们无权访问 UI 线程(您不希望经常使用 UI 线程),但我们保留了一个离屏 Bitmap
和 Canvas
我们用来在上面画画。
为什么要这样做?这是因为它允许我们专注于绘图/处理,而不必担心阻塞 UI 线程。
注意:调用方法invalidate
(或postInvalidate
)不会立即阻塞并调用onDraw
- 它只需使用操作系统排队绘制调用。
关于Android FingerPaint Example using Canvas,什么是离屏 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7190412/
如何从 Android-Native-Screen 打开 flutter 屏幕? 我开了一个 Android-Native-Screen 从现有我们 flutter 项目 . 所以,在 Android
有人知道如何使用 java 和 google chrome 最大化 selenium webdriver 窗口吗? 我已经尝试过一些命令,例如maximize () window (),但没有成功。
Redmi A65 智能电视今天正式开卖,4K 超高清大屏 + 立体声扬声器,到手价 2599 元。 IT之家了解到,Redmi A65 智能电视搭载了一块 65 英寸 4K 屏,支持 HDR
9 月 26 日消息小米电视大师「至尊纪念版」将在 9 月 29 日发布,根据今天小米集团大家电部总经理李肖爽放出的海报显示,小米电视大师至尊版有两款。 小米电视大师「至尊纪念版」是小米首款
华为手环 6 今日在海外正式发布,英文名 Band 6。这款产品是华为手环 4 的升级版,屏幕尺寸由 0.96 英寸升级为 1.47 英寸 AMOLED 屏,分辨率 194 x 368。该手环外形类
我是一名优秀的程序员,十分优秀!