Мне нужно нарисовать ~ 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)
}
}
}