Android:来自顺序命名资源的setImageResource的随机图像

时间:2014-02-11 17:52:57

标签: java android image random resources

我的资源中有一组图像。现在我正在使用骰子滚轮,它将挑选并显示随机骰子图像1-6。

像这样命名的图像:die1.png,die2.png,die3.png,die4.png,die5.png,die6.png

我似乎偶然发现了一种简单的工作方法来做到这一点,但说实话,我不知道它是否可行和稳定,因为坦率地说我不知道​​它是如何工作的,并且会非常感兴趣被引导到任何文件或有人解释为什么这样做。我不想成为那些复制粘贴代码的人之一,也不知道它为什么会起作用,而且我花了很长时间试图弄清楚这个并没有得出结论。

代码(如果重要的话,在Eclipse中):

    rand_1 = (int) Math.round(Math.random() * 5);
    dice1.setImageResource(R.drawable.die1 + rand_1);

因此我们得到一个从0到5的数字,并将其添加到命名序列中第一个图像的resId,以随机拉出6个模具图像中的一个。有道理,但是如何确保资源文件夹中的图像按顺序分配resID?就此而言,有关编译器如何分配整数资源ID的文档是否易于理解?我觉得我可能会遗漏一些简单的东西。谢谢你们的时间和男孩们。

如果这不是一个稳定的解决方案(到目前为止编译似乎工作正常)是否有更好的方法来实现这种行为?

1 个答案:

答案 0 :(得分:1)

将此方法添加到您的班级:

protected final static int getResourceID
(final String resName, final String resType, final Context ctx)
{
    final int ResourceID =
        ctx.getResources().getIdentifier(resName, resType,
            ctx.getApplicationInfo().packageName);
    if (ResourceID == 0)
    {
        throw new IllegalArgumentException
        (
            "No resource string found with name " + resName
        );
    }
    else
    {
        return ResourceID;
    }
}

然后像这样使用它:

rand_1 = (int) Math.round(Math.random() * 5);
dice1.setImageResource(getResourceID("die" + rand_1, "drawable", ctx));