如何在Android中制作闪烁的imageview ?



我想让imageView与一些背景闪烁。我将设置频率,它必须闪烁。我认为是blinking = View.VISIBLE/View.GONE还是我错了?据我所知,我可以使用kotlin协程来解决这个任务,因为普通的递归对我没有帮助。因此,在我的活动类中,我添加了这样的方法:

private fun showAlertDialog() {
val dialogue = Dialog(this)
var scope = GlobalScope
dialogue.setContentView(R.layout.alert_dialogue)
dialogue.window?.apply {
attributes =
window!!.attributes.apply { width = LinearLayoutCompat.LayoutParams.MATCH_PARENT }
}
val img = dialogue.findViewById<ImageView>(R.id.rgb_main_item)
scope.launch {
while(true) {
runOnUiThread {
img.visibility = if (img.visibility == View.GONE) View.VISIBLE else View.GONE
}

delay(140)
}
}
img.setOnClickListener {
scope = GlobalScope
}
dialogue.setCanceledOnTouchOutside(false)
dialogue.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
dialogue.show()
}

就像你在上面的代码中看到的那样——它创建了带有单一图像和透明背景的对话框。一般来说,它的工作原理就像我上面提到的,但有时我不知道发生了什么,我看到两次眨眼之间的小延迟,然后频率受损,由于这种延迟,过了一会儿,它又好了。我认为我在协程函数调用或在其他地方做错了。

与其将visibility设置为VISIBLE/GONE,不如使用alpha属性来获得最真实的效果

val blinkAnim = ObjectAnimator.ofFloat(img, View.ALPHA, 0F,1F)
blinkAnim.repeatCount = ObjectAnimator.INFINITE
blinkAnim.repeatMode = ObjectAnimator.REVERSE
blinkAnim.duration = 140
blinkAnim.start()

最新更新