我正在遍历Google的Android代码实验室,构建一个骰子滚轴应用程序,并对我的函数getRandomDiceImage()的返回类型如何为Int类型感到有些困惑,但似乎该函数正在返回ImageView。
我了解获得一个随机整数并将其存储在randomInt中,并且获得了像标准C语言一样的switch语句。但是,将该randomInt转换为R.drawable.image会让我失望。
private fun getRandomDiceImage(): Int {
val randomInt = Random().nextInt(6) + 1
return when (randomInt) {
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6
}
}
private fun rollDice() {
diceImage.setImageResource(getRandomDiceImage())
diceImage2.setImageResource(getRandomDiceImage())
}
答案 0 :(得分:2)
getRandomDiceImage()的类型为Int,但似乎函数正在返回ImageView。
否,它将返回images resource identifier
,例如@DrawableRes int
等R.drawable.dice_1
。
diceImage.setImageResource(getRandomDiceImage())
诀窍在于,setImageResource(
期望一个int
值(用@DrawableRes
注释以确保它实际上是可绘制的资源)是基于ImageView将加载位图的可绘制标识符所引用的资源。
答案 1 :(得分:1)
R.drawable.dice_1
的类型实际上是Int
,而不是ImageView
。
R
是一个静态类,其中包含资源ID(类型为Int
)。
您可以通过按cmd(macOS)或ctrl(Windows)并将光标放在R.drawable.dice_1
上来检查dice_1
的实际值,您会看到public static final int dice_1 = some_random_number
这个some_random_number是分配的ID在构建过程中使用可绘制(图像)资源。
因此,您的函数getRandomDiceImage() : Int
确实返回了Int
类型。
并且diceImage.setImageResource(getRandomDiceImage())
确实将id当作可绘制对象的参数。
答案 2 :(得分:0)
首先,您正在使用该函数根据生成的随机数来确定要使用的骰子图像。请注意,when还可以用作表达式或语句。
val drawableResource = when (randomInt) {
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6
}
diceImage.setImageResource(drawableResource)
setImageResource期望您通过when表达式传递的int resId
。