首页 > 解决方案 > 取消 (onPause) 和启动 (onResume) 后动画卡住/冻结

问题描述

我正在尝试在我的Activityusing中为 3 个图标设置动画ObjectAnimator。动画本身工作正常,但是当我通过锁定和解锁屏幕来测试它时,动画会冻结/卡住,通常是在第二次锁定和解锁屏幕之后。一旦卡住,锁定和解锁不会释放/恢复动画。

我试图取消并分别启动AnimatorsinonPause()onResume(),但它似乎不起作用。还尝试了有关 Stack Overflow 的许多其他建议,但找不到解决此问题的适当方法。

负责动画的类:

class MyAnimator(views: List<View>) {

    private var animators = listOf<Animator>()

    init {
        animators = views.map { createAnimator(it) }

    }

    fun startAnimations() {
        animators.forEach {
            it.start()
        }
    }

    fun cancelAnimations() {
        animators.forEach {
            it.cancel()
        }
    }

    private fun createAnimator(view: View): Animator {
        val jumpAnimation = ObjectAnimator.ofFloat(view, "y", 40f, 360f).apply {
            repeatCount = INFINITE
            repeatMode = ValueAnimator.REVERSE
        }

        val rotateAnimation = ObjectAnimator.ofFloat(view, "rotation", 360f).apply {
            repeatCount = INFINITE
            repeatMode = ValueAnimator.REVERSE
        }

        return AnimatorSet().apply {
            duration = Random.nextLong(1200, 1800)
            playTogether(jumpAnimation, rotateAnimation)
        }
    }
}

活动:

class MyActivity : AppCompatActivity() {

    private lateinit var animator: MyAnimator
    private var icons = listOf<ImageView>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_layout)
        gameIcons = listOf(firstIconIV, secondIconIV, thirdIconIV)
        animator = MyAnimator(gameIcons)
    }

    override fun onPause() {
        super.onPause()
        animator.cancelAnimations()
    }


    override fun onResume() {
        super.onResume()
        animator.startAnimations()
    }
}

标签: androidkotlinandroid-animation

解决方案


推荐阅读