首页 > 解决方案 > 为什么我无法使用 Kotlin 更改 ImageView 的可见性?

问题描述

ImageView 仅更改一次可见性。我不明白可能是什么问题。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        println("Let's do it")
        val btn: ImageView = findViewById(R.id.imageView)
        while (true) {
            Handler().postDelayed({
                btn.isVisible = true
                Handler().postDelayed({
                    btn.isVisible = false
                }, 1000)
            }, 1000)
        }
    }
}

标签: androidkotlin

解决方案


让我们简化这段代码

        while (true) { // you will keep running this 
            Handler().postDelayed({
                ... // this code will won't be exec until 1000ms 
            }, 1000)
        }

所以你可以看到,1000ms你会在消息队列中添加这么多消息。
OK,让我们看看这个时间段 1000-2000ms:
在这个时间段,handler 会做两件事:

  1. 继续在处理程序中发布延迟消息
  2. 执行前 1000 毫秒的消息

第 2 步还将做两件事:

  1. 设置可见=真
  2. 发布消息 make visible = false

所以让我们看看 2000-3000 毫秒:
这一次会做 3 件事:

  1. 继续在处理程序中发布延迟消息
  2. 执行前 1000 毫秒的消息
  3. 执行 step2 的消息

step3 会做一件事;使视图不可见。

所以:
0-1000ms:视图什么都不做。
1000-2000ms:视图将被设置为可见
2000-:视图将非常快速地设置为可见和不可见,因此您无法区分。


推荐阅读