使用 Android Studio 根据用户选择动态更改图像

dynamically changing images based on user choices with Android Studio

我正在制作一款拼图应用,我想允许拼图有多种不同的配置,包括使用不同的图像。考虑这样的资源名称:

-drawable
  -ImageResource1__puzzleType1__picture1
  -ImageResource2__puzzleType2__picture1
  etc.

理想情况下,我希望能够像这样动态地引用它:

static final String IM1 = "ImageResource1__"
static final String puz1 = "puzzleType1__"
mImage.setDrawable(R.drawable.IM1 + puz1 + picture1)

这可能吗?

我花了一段时间终于找到了这个信息。诀窍是使用 Resources.GetIdentifier();并将您尝试访问的资源的名称拼凑成一个字符串。最终结果如下所示:

            String Package_Name = getBaseContext().getPackageName();
            Resources mResources = getBaseContext().getResources();

            PIC1 = mResources.getIdentifier(currentPicture + currentSize + "pc_1", "drawable", Package_Name);
            PIC2 = mResources.getIdentifier(currentPicture + currentSize + "pc_2", "drawable", Package_Name);

注意:现在您可以简单地插入 getBaseContext().getPackageName();和 getBaseContext().getResources();使用它们的标识符的地方但这会在您分配的第一个变量之后添加两个不必要的方法调用。

因为不清楚我把我的图片资源命名为genre_size_number的模版。例如:StarTrekEmblem_Large_pc_1。 currentPicture 包含一个字符串,例如 StartrekEmblem_,而 currentSize 包含一个字符串,例如 Large_。我本可以使用循环在 pc_ 之后添加 1 或 2,但这又会给程序增加不必要的开销。

最后注意:"drawable" 表示您变量指向的资源类型。我指出这一点是因为我发现的示例使用了 "string"。在一个特别宏伟的愚蠢展示中,我假设这是为了指示您试图将其存储在其中的变量的类型。正如您所猜到的,我做了很多 运行 来解决上述错误。