Как лучше всего нарисовать 250 тысяч очков? - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужно нарисовать ~ 250'000 точек разных цветов из двумерного массива. Я пытаюсь сделать это с помощью SurfaceView. Это работает хорошо, но рисование занимает 2-3 секунды (я смотрю время между записями журнала «Начать рисование» / «Рисование выполнено»). Возможно, я выбрал неправильный путь или поступил неправильно. Какой самый лучший способ получить 250 тысяч очков в Android?

Вот мой код:

class MyDrawThread(private val surfaceHolder: SurfaceHolder) : Thread() {

    var isRunning = false
    var points: List<List<Int>>? = null

    override fun run() {
        var canvas: Canvas?
        while (isRunning) {
            points?.let { points ->
                canvas = null
                try {
                    Log.d(TAG, "Start draw")
                    canvas = surfaceHolder.lockCanvas(null)
                    synchronized(surfaceHolder) {
                        canvas!!.drawColor(Color.BLACK)
                        for ((x, list) in points.withIndex()) {
                            val paint = Paint()
                            for ((y, colorId) in list.withIndex()) {
                                paint.color = getColor(colorId) // Get color from hardcoded array by index
                                canvas!!.drawPoint(x.toFloat(), y.toFloat(), paint)
                            }
                        }
                    }
                } finally {
                    surfaceHolder.unlockCanvasAndPost(canvas)
                    Log.d(TAG, "Draw done")
                }
            }
            Thread.sleep(10000L)
        }
    }
}
...