[英]Why I can't change the visibility of my ImageView with Kotlin?
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)
}
}
}
讓我們簡化這段代碼
while (true) { // you will keep running this
Handler().postDelayed({
... // this code will won't be exec until 1000ms
}, 1000)
}
所以你可以看到,1000ms 你會在消息隊列中添加這么多消息。
OK,我們看看這個時間段1000-2000ms:
此時,handler 會做兩件事:
第 2 步還將做兩件事:
所以讓我們看看2000-3000ms:
這次會做3件事:
step3 會做一件事; 使視圖不可見。
所以:
0-1000ms:視圖什么都不做。
1000-2000ms:視圖將設置為可見
2000-:視圖將很快設置為可見和不可見,因此您無法區分。
最小的例子:
class MainActivity : AppCompatActivity() {
private lateinit var target : ImageView
private val handler : Handler = Handler(Looper.getMainLooper())
private val runnable : Runnable = object : Runnable {
override fun run() {
target.isVisible = !target.isVisible
handler.postDelayed(this, 1_000)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
target = findViewById<ImageView>(R.id.imageView)
}
override fun onResume() {
super.onResume()
handler.postDelayed(runnable, 1_000)
}
override fun onPause() {
super.onPause()
handler.removeCallbacksAndMessages(null)
}
}
你做錯一件事
btn.isVisible = true
btn.isVisible = false
它應該是
btn.visibility = GONE
btn.visibility = VISIBLE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.