以编程方式将随机图像设置为图像按钮

时间:2013-04-14 20:16:37

标签: java android casting drawable imagebutton

我正在尝试随机选择我的ImageButton使用的图片。

我认为此代码应该可以正常工作,但在将资源作为String传递时似乎存在问题。

    ImageButton getClickTime = (ImageButton) findViewById(R.id.clicker);

    Random generator = new Random();
    int generatedRandom = generator.nextInt(10) + 1;
    String randomImage = "R.drawable.bg" + (String.valueOf(generatedRandom)) ;
    Drawable replaceImage = getResources().getDrawable((int) randomImage);

    getClickTime.setImageDrawable((Drawable) replaceImage);

我似乎对int s,String s,drawableCharSequence s的演员阵容陷入了混乱。

如果我手动输入随机选择的图像资源,它会起作用。但是,如果我将String传递给文本框,我可以看到它与我手动输入的内容完全相同。

谁能看到我在这里做错了什么?

提前致谢

3 个答案:

答案 0 :(得分:3)

您的问题是您误解了Android如何使用资源ID。 R文件包含映射到应用中包含的资源的int个ID。您试图通过将drawable引用转换为String来引用int资源。这是不可能的,也没有意义。

我建议您创建一个int[],其中包含您想要随机选择的所有drawable的ID。

    int[] imageIds = { 
            R.drawable.bg1,
            R.drawable.bg2,
            R.drawable.bg3,
            R.drawable.bg4,
            R.drawable.bg5
            // etc for as many images you have
    };

然后,随机选择其中一个drawable ID并将其设置为ImageButton

    ImageButton getClickTime = (ImageButton) findViewById(R.id.clicker);
    Random generator = new Random();
    int randomImageId = imageIds[generator.nextInt(imageIds.length)];
    getClickTime.setImageResource(randomImageId);

答案 1 :(得分:0)

如果你想获得资源的id,你应该使用这样的东西:

    int id = context.getResources().getIdentifier("resource_name", "drawable", context.getPackageName());
     Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), id);

答案 2 :(得分:0)

您可能想要使用所有图像的数组并通过随机索引获取它:

int[] all = {
    R.drawable.bg1,
    R.drawable.bg2,
};