表面上的画布闪烁

时间:2019-12-06 09:00:49

标签: android canvas surfaceview

我正在编写绘图应用程序并使用画布。我创建了surfaceView并重写了onTouch函数来跟踪用户的手指运动。但是当用户绘图时,surfaceView会闪烁。我该如何解决?

这是我的绘图代码:

override fun onTouchEvent(event: MotionEvent?): Boolean {
    if (event != null)
    if (event.action == MotionEvent.ACTION_MOVE && holder != null) {
        thread {
            val canvas = holder.lockCanvas()
            canvas.drawBitmap(brush,
                event.x - brush.width.div(2),
                event.y - brush.height.div(2),
                null)
            holder.unlockCanvasAndPost(canvas)
        }.join()
    }
    return true
}

1 个答案:

答案 0 :(得分:0)

我想象每次onTouchEvent发生时通过https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/thread.html创建一个新线程是非常昂贵的,并且会引起闪烁。相反,我会尝试在单个线程中进行画布锁定/解锁+位图绘制循环,并在从onTouchEvent更改x和y时告诉线程。