【问题标题】:Setting Image to ImageButton randomly on every click每次点击时随机将 Image 设置为 ImageButton
【发布时间】:2017-07-08 09:49:38
【问题描述】:

我正在尝试从图像中制作一个按钮,其想法是每次单击按钮都会更改图像,因此按钮的形状和外观也会发生变化。

例如,每次点击都会给出一个点,每个形状或 “图像”是根据我为此目的制作的算法选择的

我在下面的代码中随机生成了这三个变量的值:

rand = new Random(System.currentTimeMillis());
x = rand.nextInt(3);
y = rand.nextInt(8);
z = rand.nextInt(10);

将生成的数字分配给字符串以使用以下代码创建图像的下一个 id

String myID = "R.id.myImage_" + x + y + z;

我使用这个代码:

int resource = getResources().getIdentifier(myID, "drawable", "com.asgames.package");

但是,我仍然收到找不到图像的错误。

【问题讨论】:

  • 所有图片都有自己的ID,也就是它们的名字:R.drawable.image1R.drawable.image2等。为什么需要它们有随机ID?
  • 正如我所说,我是 Android 新手,对不起...[更新问题] 我有随机选择的 ID,如何将图像按钮设置为与随机生成的 ID 完全相同? @JonZarate
  • 你想用具有随机 ID 的 ImageButton 做什么?
  • 每个 ImageButton 也有它的 ID。在 XML 中定义:android:id="@id+/imageButton1"android:id="@id+/imageButton1"
  • “我仍然得到一个错误” -> 什么错误?

标签: android button random imagebutton


【解决方案1】:

要在 android 中为 View 生成随机 id,您可以使用 generateViewId(),它是 Android 库中捆绑的 View 类中的一个方法,文档说:

生成一个适合在 setId(int) 中使用的值。这个值不会 与 aapt for R.id 在构建时生成的 ID 值发生冲突。

查看官方文档here

所以现在您可以执行以下操作:

    int imageCoordinates = x + y + z;
    int imageId = View.generateViewId() + imageCoordinates;

【讨论】:

    【解决方案2】:

    您可以使用以下代码来做到这一点:

    int resource = getResources().getIdentifier(myID, "drawable", "com.your.package");
    

    PS:把名字中的“R.id.”去掉。

    【讨论】:

    • 它工作得很好,但它给出了这个错误 getSlotFromBufferLocked: unknown buffer error @Aftab Hussain
    • 显然,这是 Marshmellow 的未解决问题。在stackoverflow.com/questions/32561479/…看'Itai Hanski'的答案@
    【解决方案3】:
    1. 重命名您的图像,如 image1、image2、...、image150。

    2. 生成一个介于 1 到 150(包括两者)之间的随机数。

    3. 使用以下代码获取图像资源 ID。 (如果您已将图像放置在 mipmap 文件夹中,请使用“mipmap”而不是“drawable”)

      String myID = "image"+ generatedRandomNumber;
      int resource = getResources().getIdentifier(myID, "drawable", "com.your.package");
      
    4. 使用此资源 id 为ImageButton 设置图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多