Мой вопрос касается производительности для создания анимации в пользовательском представлении, я занимаюсь разработкой шахматной игры, и мне нужно анимировать ход рисования каждый раз, когда пользователь делает движение, проблема в том, что я перерисовываюВ целом, я много раз обновлял позицию отрисовки до тех пор, пока она не получит окончательную позицию, мне было интересно, есть ли лучший способ сделать это, так как я не могу понять, как это сделать.Вот мой код
private fun animatePieceMovement(canvas: Canvas?) {
pieces.forEach {
if (it.position != selectedPiece!!.position) {
val left = (squareWidth!! * (it.position!!.first)) + padding
val top = (squareWidth!! * (it.position!!.second)) + padding
val right = (left + squareWidth!!) - (padding * 2)
val bottom = (top + squareWidth!!) - (padding * 2)
val drawable = it.rDrawable!!
drawable?.setBounds(left, top, right, bottom)
drawable?.draw(canvas)
}
}
val now = System.currentTimeMillis()
var current = ((100 - (endTime - now) * 100 / (ANIMATION_TIME)) / 100.0)
if (current >= 1) {
current = 1.0
animActive = false
}
val endLeft = (squareWidth!! * (positionDestiny!!.first)) + padding
val endTop = (squareWidth!! * (positionDestiny!!.second)) + padding
val left = (squareWidth!! * (selectedPiece!!.position!!.first)) + padding
val top = (squareWidth!! * (selectedPiece!!.position!!.second)) + padding
val increaseLeft = (left + ((endLeft - left) * current)).toInt()
val increaseTop = (top + ((endTop - top) * current)).toInt()
val right = (increaseLeft + squareWidth!!) - (padding * 2)
val bottom = (increaseTop + squareWidth!!) - (padding * 2)
val drawable = selectedPiece!!.rDrawable!!
drawable?.setBounds(increaseLeft, increaseTop, right, bottom)
drawable?.draw(canvas)
if (!animActive) {
movements.movePiece(positionDestiny!!)
move += 1
selectedPiece = null
positionDestiny = null
highlights.clear()
invalidate()
return
}
mHandler.postDelayed({
invalidate()
}, 10)
}
Обычно, если фигура движется, я обновляю свою позицию в зависимости от времени.
Любая идея будет полезна.
Спасибо