【问题标题】:Canvas on surfaceView flickeringSurfaceView上的画布闪烁
【发布时间】:2019-12-06 09:00:49
【问题描述】:

我正在编写绘图应用程序并使用画布。我创建了我的 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
}

【问题讨论】:

    标签: android canvas surfaceview


    【解决方案1】:

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

    【讨论】:

    • 我试图在单独的线程中在画布上绘图,但它仍然闪烁 :(
    • 但我找到了解决方案 - 实现 View 而不是 SurfaceView
    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 2015-12-28
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2022-08-24
    • 2011-04-04
    • 2018-06-20
    相关资源
    最近更新 更多