android - 取消 (onPause) 和启动 (onResume) 后动画卡住/冻结
问题描述
我正在尝试在我的Activity
using中为 3 个图标设置动画ObjectAnimator
。动画本身工作正常,但是当我通过锁定和解锁屏幕来测试它时,动画会冻结/卡住,通常是在第二次锁定和解锁屏幕之后。一旦卡住,锁定和解锁不会释放/恢复动画。
我试图取消并分别启动Animators
inonPause()
和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()
}
}
解决方案
推荐阅读
- python - 如何在 django 模型方法中将连接函数作为参数传递
- postgresql - Postgres 更新行并在高竞争下返回原始数据
- azure - 从 azure blob 插入数据并根据 blob 的名称插入 Azure 数据工厂中的某个表
- r - 如何在r中获取时间序列中的特定日期
- c# - 如何从 C# 中的动态 XML 中读取特定值?
- c# - 使用具有复杂过滤器语法的外部 API
- node.js - 如何在 NestJs 中动态注入提供程序
- printing - 使用redmon和ghostscript的打印机端口配置,错误无效窗口句柄
- nginx - Reducing outbound transfer in nginx rtmp server
- javascript - 异步/等待、承诺和 .map()