【问题标题】:Drawable Reference可绘制参考
【发布时间】:2014-03-19 13:51:01
【问题描述】:

我的应用程序中几乎没有图像(它们都被复制到 res/drawable 并具有适当的 R.drawable 引用),我想使用字符串类型变量的内容将它们分配给我的 ImageViews。为了说明,我的可绘制文件夹中有一个名为“c4.png”的图像文件和一个包含“c4”的字符串变量(卡片)。我想看看是否有任何方法可以使用这样的代码 (ImageView1.setImageResource(R.drawable.card)) 将图像 c4 分配给我的 ImageView1,而不是使用 ImageView1.setImageResource(R.drawable.c4)。基本上,我想知道是否可以用 R.drawable.resourceName 中的特定图像名称替换变量。我知道 R.drawable.resourceName 是一个整数,我不想改变它的类型。我想用变量替换资源名称。我感谢任何帮助

【问题讨论】:

  • 我可以知道你想要达到什么目标吗?
  • 我知道如何将图像分组到数组中,然后使用该数组来设置图像资源。但我不明白你为什么要更改图像的名称。
  • @mussharapp 这是一款纸牌游戏,随机选择并显示一张纸牌。我有一个方法可以生成一个随机字符串,例如 c4,它引用一张卡片图像(假设我有 10 个从 c1 到 c10 的图像)该方法将随机选择一个并将其作为字符串“c4”返回例如.现在我想使用与我的可绘制资源名称相同的字符串“c4”来更新我的 UI 上的卡片图像。
  • @KanwaljitSingh 我没有更改图像的名称。名字完全一样。我只想使用包含图像名称而不是图像直接名称的变量,因此该变量可以采用我在可绘制对象中拥有的任何其他图像名称。我在回复最后一条评论时提供了更多信息。当我使用 ImageView1.setImageResource(R.drawable.c4) 时,它会使用 c4 图像更新我的 UI,但我不能执行 ImageView1.setImageResource(R.drawable.card) 而 card 是一个包含值“c4”的变量。
  • 好的。我认为您必须随机选择一个数字而不是字符串。使用该数字,您可以从图像数组中选择图像。

标签: android imageview drawable


【解决方案1】:

使用它来绘制特定范围内的随机数-

int min = 0;
int max = 9;

Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;

然后使用这个数字从图像数组中挑选图像-

public Integer[] nImages = {
                R.drawable.c1, R.drawable.c2,
                R.drawable.c3, R.drawable.c4,
                R.drawable.c5, R.drawable.c6,
                R.drawable.c7, R.drawable.c8,
                R.drawable.c9, R.drawable.c10
    };

ImageView1.setBackgroundResource(nImages [i1]);

希望这行得通。

【讨论】:

    【解决方案2】:

    试试这个

    Resources res = getResources();
    
    int id = res.getIdentifier(card, "drawable", getPackageName());
    img.setImageResource(id);
    

    这可能会解决您的问题。

    【讨论】:

      【解决方案3】:

      或者您可以将图像放在资产文件夹中。资产由其文件名引用,如

      getAssets().open(<filename>);
      

      这将返回一个 InputStream。之后将它们转换为位图资源很简单

      BitmapFactory.decodeStream(inputStream);
      

      然后将该位图用于您的 ImageView。这应该是直截了当的

      imageView.setImageBitmap(bitmap);
      

      【讨论】:

        【解决方案4】:

        我想用变量替换资源名称。

        不是将变量 card 声明为字符串,而是将其声明为整数。这样你就可以像下面这样使用它了。

        int card=R.drawable.c4;
        ImageView1.setImageResource(card);
        

        你可能不能做像 R.drawable.card 这样的事情,因为 R 文件是根据 drawable 文件夹中的资源生成的。 希望这会有所帮助

        【讨论】:

        • 作为参数传递给 setImageResource 的整数应该引用 R.java 中表示的资源的确切值。我可以更改我的方法来为卡片提供一个整数,但它不会与 R 类中存在的值相同。
        猜你喜欢
        • 1970-01-01
        • 2011-09-13
        • 1970-01-01
        • 2013-06-05
        • 2020-03-24
        • 1970-01-01
        • 1970-01-01
        • 2022-06-30
        • 2012-01-13
        相关资源
        最近更新 更多