我有一个自定义surfaceView,它将根据Touch事件绘制表面。当我在这个视图上画一些东西时,它工作正常。但当我试图擦掉油漆时,没有任何东西被抹去。请在下面找到示例代码段:
{{1}}
上面的代码有什么问题?
答案 0 :(得分:0)
您应该将您的绘图代码保存在onDraw
方法
@Override
protected void onDraw(Canvas canvas) {
// In case you want to delete/erase when path array/list is cleared.
if (pathArrayList.size() == 0) {
canvas.drawColor(0, Mode.CLEAR);
}
// In case, you want to draw all paths also in onDraw
for(Path path : pathArrayList) {
canvas.drawPath(path, paint);
}
}
清除Path Array(列表)然后在调用invalidate()时,onDraw会被触发。
注意:你应该在onTouchEvent()的末尾调用invalidate()来告诉系统更新屏幕。调用invalidate()将使框架最终调用onDraw()。
此外不应使用canvas
获取的lockCanvas
,因为它不会被硬件加速。相反,你应该使用作为参数传递给onDraw()本身的画布。
您可以选择通过不必每帧绘制路径的拉列表来使系统变得有点智能,而是通过使用特殊标志来处理擦除/重绘等。否则只渲染最近一次调用onTouchEvent()生成的最新路径。