Пользовательский просмотр анимации - PullRequest
0 голосов
/ 19 марта 2019

Мой вопрос касается производительности для создания анимации в пользовательском представлении, я занимаюсь разработкой шахматной игры, и мне нужно анимировать ход рисования каждый раз, когда пользователь делает движение, проблема в том, что я перерисовываюВ целом, я много раз обновлял позицию отрисовки до тех пор, пока она не получит окончательную позицию, мне было интересно, есть ли лучший способ сделать это, так как я не могу понять, как это сделать.Вот мой код

    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)
}

Обычно, если фигура движется, я обновляю свою позицию в зависимости от времени.

Любая идея будет полезна.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...