【问题标题】:Android: random image with setImageResource from sequentially named resourcesAndroid:来自顺序命名资源的具有 setImageResource 的随机图像
【发布时间】:2014-02-11 17:52:57
【问题描述】:

我的资源中有一组图像。现在我正在研究一个骰子滚轮,它将挑选并显示随机骰子图像 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 个 die 图像中的一个。有道理,但你怎么能确定资源文件夹中的图像是按顺序分配的 resID 呢?就此而言,是否有关于编译器如何分配整数资源 ID 的易于理解的文档?我觉得我可能在这里遗漏了一些简单的东西。谢谢你们的时间。

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

【问题讨论】:

    标签: java android image random resources


    【解决方案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));
    

    【讨论】:

    • 感谢您提供的信息。这种查找资源的方法对我来说比上面发布的更有意义,但我发布这个问题的主要原因是试图弄清楚为什么我在我的 OP 中描述的解决方案有效(并且它确实像复制的那样有效)。也就是说,这似乎是一个非常可行的替代方案,我感谢您提供它。
    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 2011-03-20
    • 2020-09-18
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多