擦除功能在Custom SurfaceView Android中无效

时间:2016-03-01 06:26:55

标签: android android-canvas surfaceview erase

我有一个自定义surfaceView,它将根据Touch事件绘制表面。当我在这个视图上画一些东西时,它工作正常。但当我试图擦掉油漆时,没有任何东西被抹去。请在下面找到示例代码段:

{{1}}

上面的代码有什么问题?

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()生成的最新路径。