如何设置计时器每隔一定时间重复三个功能(在图像视图中显示图片)?



所以目前我正在为我的实习制作一个神奇宝贝。 我已经让它工作了大部分,但有几件事我需要解决,包括上面提出的问题。 我有一个名为Eeveelutions的函数,它必须运行另外三个函数,分别是showVaporeon,showJolteon和showFlareon。他们必须每人运行大约 3 秒,然后绕圈,直到使用口袋妖怪的人去下一个或上一个神奇宝贝。 我需要帮助的是我将如何设置计时器(如果这是最好的方法(来运行这些功能。因此,显示Vaporeon3秒钟,然后显示Jolteon3秒钟,然后显示Flareon3秒钟并重复。 我已经搜索了大量问题来找到我的解决方案,但我还找不到它,而且其中大部分不在 kotlin 中。

那么,有没有人为我提供了一个简单的例子,或者比使用计时器更好的解决方案(和示例(。

搜索论坛寻找解决方案, 弄乱了计时器, 弄乱了线程,但还没有解决方案

fun showVaporeon(){
evoChart2.visibility = View.VISIBLE
Glide.with(this).load(imageBaseURL + "134" + ".png").into(evoChart2)
evolveOption2.text = "Vaporeon"
evolveOption2.text = ""
evoChart2.visibility = View.GONE
}
fun showJolteon(){
evoChart2.visibility = View.VISIBLE
Glide.with(this).load(imageBaseURL + "135" + ".png").into(evoChart2)
evolveOption2.text = "Jolteon"
evolveOption2.text = ""
evoChart2.visibility = View.GONE
}
fun showFlareon(){
evoChart2.visibility = View.VISIBLE
Glide.with(this).load(imageBaseURL + "136" + ".png").into(evoChart2)
evolveOption2.text = "Flareon"
evolveOption2.text = ""
evoChart2.visibility = View.GONE
}

所以我希望evoChart2(这是我拥有的三个图像视图之一(显示Vaporeon3秒,然后Jolteon显示3秒,然后是Flareon3秒,然后再次显示Vaporeon3秒,Jolteon,Flareon等。

由于你想要一个循环,我建议使用一个列表,以便将来更容易迭代和添加更多的口袋妖怪。

创建一个口袋妖怪数据类,如果你还没有。

data class Pokemon(val name: String, val imageUrl: String)

根据需要创建此类的任意数量的实例,并将它们添加到列表中。

val pokemonList: List<Pokemon> = listOf(vaporeon, jolteon, flareon)

我们还需要存储我们正在显示的当前口袋妖怪的索引

var currentIndex = 0

接下来,我们将创建一个 Runnable 并计划它每三秒执行一次,您可能希望在 onResume 中执行此操作。

val service = Executors.newSingleThreadScheduledExecutor()
service.scheduleAtFixedRate({ displayPokemon() }, 0, 3, TimeUnit.SECONDS)

现在创建每 3 秒调用一次的显示口袋妖怪函数。

fun displayPokemon() {
}

在这个函数中,我们需要根据当前的口袋妖怪知道我们显示的下一个口袋妖怪是什么。

val next = currentIndex + 1
if (next >= pokemonList.size) {
// we're at the end, go back to 0
currentIndex = 0
} else {
currentIndex = next
}
val pokemon = pokemonList[currentIndex]

现在我们有了下一个要显示的口袋妖怪,我们可以使用它来填充视图

evoChart2.visibility = View.VISIBLE
Glide.with(this).load(pokemon.imageUrl).into(evoChart2)
evolveOption2.text = pokemon.name
evolveOption2.text = ""
evoChart2.visibility = View.GONE

最后,我们不希望当活动/片段在后台时发生这种情况,因此我们将以下代码添加到 onPause

service.shutdown()

最新更新