Runnable未在Android上的浮动操作栏上运行
我一直试图让晶圆厂旋转并更改其图标,但由于某种原因,Runnable未在Android上的浮动操作栏上运行,android,kotlin,Android,Kotlin,我一直试图让晶圆厂旋转并更改其图标,但由于某种原因,Runnable根本不起作用 代码如下: private val handler: Handler = Handler() private var isRotate: Boolean = false private val rotate: Animation = RotateAnimation(0.toFloat(),90.toFloat(),0.toFloat(),0.toFloat()) private val r: Runnable
Runnable
根本不起作用
代码如下:
private val handler: Handler = Handler()
private var isRotate: Boolean = false
private val rotate: Animation = RotateAnimation(0.toFloat(),90.toFloat(),0.toFloat(),0.toFloat())
private val r: Runnable = Runnable {
fun run() {
if (isRotate) {
fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null))
isRotate = false
} else {
fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null))
isRotate = true
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
...
rotate.duration = 1000
rotate.repeatCount = 0
rotate.repeatMode = Animation.REVERSE
rotate.fillAfter = true
fab2?.setOnClickListener { view ->
ObjectAnimator.ofFloat(view,"rotation",0.toFloat(),90.toFloat()).setDuration(800).start()
view.handler.postDelayed(r,400)
}
}
按钮旋转,但图标不变,这意味着OnClickListener
正在工作,而Runnable
没有工作
如何实现这一点?您以错误的方式声明您的
可运行。您声明的lambda表达式实际上是run()
函数,您在其中声明了另一个run()
函数
声明对象的正确方法应为:
private val r: Runnable = object: Runnable {
override fun run() {
if (isRotate) {
fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null))
isRotate = false
} else {
fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null))
isRotate = true
}
}
}
或(λ表达式):
如果要在单击fab2
时强制播放动画,应使用fab2!!。onClickListener
或使fab2
不可为空。如果左侧表达式为null
,安全调用操作符?
将忽略以注册任何侦听器。这意味着您的fab2
可能是null
。正如我刚才编辑的,问题不是fab2为null,roate函数工作正常,但处理程序不工作。
private val r: Runnable = Runnable {
if (isRotate) {
fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null))
isRotate = false
} else {
fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null))
isRotate = true
}
}