xml - 旋转动画期间更新属性
问题描述
我正在 Kotlin 中制作旋转动画,并且在每个动画之后我想设置一个 net rotationStart 和 rotationEnd,其中 rotationStart 值最初应设置为 = 0,然后在每次旋转后假定 rotationEnd 值的值
val rand = Random()
var rotStart : Float = 0f
var rotEnd : Float = rand.nextFloat(100f)
像这样设置旋转:
var rotateAnimation = RotateAnimation(
rotStart, rotEnd,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f
)
rotateAnimation.duration = 4000
rotateAnimation.repeatCount = 4
与听众:
rotateAnimation.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation?) {
}
override fun onAnimationRepeat(animation: Animation?) {
rotStart = rotEnd
rotEnd = rand.nextFloat(359f)
}
override fun onAnimationEnd(animation: Animation?) {
}
})
img_spinner.startAnimation(rotateAnimation)
}
这里的问题是,值 rotStart 和 rotEnd 在每个周期后都不会更新。是否有我忘记实现的 onUpdateListener ?
解决方案
好吧,到目前为止我发现的唯一方法就是这里(以防万一没有人回答这个帖子,这是我的解决方案)
val angles = arrayOf(9,6,9,4)
var rotStart = 0f
var imageSpinner = findViewById<ImageView>(R.id.img_spinner)
val ra1 = RotateAnimation(rotStart,-angles[0].toFloat() * 39, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f)
ra1.duration = 3200
val ra2 = RotateAnimation(rotStart, -angles[1].toFloat() * 39, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f)
ra2.duration = 1900
val ra3 = RotateAnimation(rotStart, -angles[2].toFloat() * 39, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f)
ra3.duration = 5400
val ra4 = RotateAnimation(rotStart, -angles[3].toFloat() * 39, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f)
ra4.duration = 5400
在此之后,您必须在每个 onAnimationEnd 上设置:imageview.startAnimation(ra#NUMBER#)。这是一种解决方法,而不是一个干净的解决方案:-)
推荐阅读
- java - OpenJDK 11 是否支持 Java Flight Recorder?
- java - 我想设置值,但 getInt 和 getString 不起作用,但它显示 getAsInt 和 getAsString,并且不接受成员名称
- javascript - 限制对 Facebook graph_url_engagement_count 的调用
- python - How to handle partial messages in MQTT subscriber?
- python - Pyspark 将字符串分解为多行列
- php - Laravel Stripe Cashier 删除客户
- php - 无法在 cakephp 4 中调用验证提供程序中的方法
- maven - 在 Nexus 服务器上设置经过身份验证的 maven 存储库
- javascript - 如何创建可移植的链接轮播?
- java - Spring Boot WebClient 连接和读取超时