我正在编写绘图应用程序并使用画布。我创建了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
}
我想每次onTouchEvent发生时都通过https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/thread.html创建一个新线程非常昂贵,并且会引起闪烁。相反,我会尝试在单个线程中进行画布锁定/解锁+位图绘制循环,并在从onTouchEvent更改x和y时告诉线程。