【问题标题】:How can I change background with random time?如何随机更改背景?
【发布时间】:2020-05-20 18:20:45
【问题描述】:

我是 Stack Overflow 上的新手,我想学习回答这个问题,请不要给我负面评价。

如何在 Android Studio 上随随机时间和每次更改背景颜色?我正在使用 Kotlin 语言。

var counter:Int =0

        if (Random.nextBoolean())
            background.setBackgroundColor(Color.GREEN)
        else
            background.setBackgroundColor(Color.RED)

        btn_touch.setOnClickListener {

            counter += 1
            textCounter.text = counter.toString()

【问题讨论】:

  • 您希望背景颜色多久更改一次?
  • 我只想换成绿色或红色
  • 什么时候你想改变背景?每一秒?每次用户访问屏幕?每次有人点击一个按钮?
  • 我想更改背景随机时间,例如绿色后 5 秒,然后可能 1 秒后会变为红色。我能解释一下吗?

标签: android android-studio android-layout kotlin


【解决方案1】:

一个有趣的协程答案:

    var loop = true
    GlobalScope.launch(Dispatchers.IO) {
        while(loop) {
            delay(TimeUnit.SECONDS.toMillis(Random.nextLong(5)))
            withContext(Dispatchers.Main) {
                when (Random.nextBoolean()) {
                    true -> background.setBackgroundColor(Color.GREEN)
                    false -> background.setBackgroundColor(Color.RED)
                }
            }
        }
    }

这将在两种颜色之间随机改变颜色,随机间隔为 1-5 秒。

您需要 build.gradle 中的依赖项:

dependencies {
         implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3"
         implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3'   
    }

控制循环值以开始和停止随机化。 (也许在onResume & onPause

你也可以让它选择随机颜色:

 background.setBackgroundColor(Random.nextInt(255))

【讨论】:

  • 我不明白GlobalScope.launch(Dispatchers.IO) GlobalScope 和 Dispatchers 是未解决的参考我该怎么办?
  • @life4 使用您需要添加的 kotlin 协程依赖项对其进行了更新:-)
【解决方案2】:

试试下面的代码sn-p

val maxDelay = 10000L
val handler = Handler()
var isRed = true;
val updateRunnable = object : Runnable {
    override fun run() {
        background.setBackgroundColor(if(isRed) Color.RED else Color.GREEN)
        isRed = !isRed
        handler.postDelayed(this, Random.nextLong(maxDelay))
    }
}
handler.post(updateRunnable)

根据需要设置maxDelay 值,当您不再需要时不要忘记调用handler.removeCallbacks(updateRunnable)

【讨论】:

  • 当我导入 Handler() 方法时,android studio 有 2 个部分,其中一个 android.os 和另一个 java.util.logging 有什么区别
  • 我选择 android.os 它可以工作我理解代码。这非常有帮助,非常感谢:)
【解决方案3】:

你可以在选中时添加CheckBox,如果不添加红色则添加绿色背景

btn_touch.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener
        { compoundButton, ischecked ->
            if (ischecked) {
            background.setBackgroundColor(Color.GREEN)
            } else{
            background.setBackgroundColor(Color.RED)

              }
        })

但是如果你想添加随机每按一次给你不同的颜色,你可以关注这个问题。 Android: Set Random colour background on create

希望对你有帮助。

【讨论】:

  • 对不起,我不想使用复选框,我想随机更改背景颜色。
猜你喜欢
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
相关资源
最近更新 更多