Runnable不能在Android上的浮动操作栏上运行

我一直在试图让晶圆厂旋转并改变它的图标,但由于某种原因, 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不是。

我如何做到这一点?

One Solution collect form web for “Runnable不能在Android上的浮动操作栏上运行”

你正在用错误的方式声明你的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 } } } 

或(lambda表达式):

 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 } } 
  • 匕首与Kotlin上的Mvp - Android
  • Kotlin:从类对象获取超类 - 对象推理错误
  • Kotlin删除所有非字母数字字符
  • 在Kotlin中实例化一个泛型类型
  • 为什么上下文不具有活动的主要颜色属性?
  • Kotlin代码编译为Jar用于Java Project?
  • Android Studio 3.0 beta2
  • 减少范围抛出NoClassDefFoundError:kotlin / IntIterator
  • 代码1和代码2在Kotlin有什么不同?
  • 为什么在Kotlin中使用方法引用来暂停函数是不可能的?
  • 隐式映射到Kotlin中设置
  • Kotlin language will be the best programming language for Android.