2013-04-14 89 views
1

我試圖讓我的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,drawable S和CharSequence小號石膏亂是越來越。

如果我手動輸入一個隨機選擇的圖像資源,它的工作原理。但是如果我將String傳遞給文本框,我可以看到它的寫法與手動輸入時完全相同。

任何人都可以看到我在做什麼錯在這裏?

在此先感謝

+0

您不能將字符串轉換爲int - > randomImage。如下所述,您應該從資源獲取位圖/繪圖,並將新圖像設置爲按鈕。 – MikeL

回答

3

您的問題是您誤解了Android使用資源id的方式。 R文件包含映射到應用中包含的資源的int ID。您正試圖通過將其String參考文件轉換爲int來引用drawable資源。這是不可能的,也沒有意義。

我建議您創建一個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); 
+0

它的工作原理!多麼美妙的迴應。你不僅給了我一個工作代碼的例子,而且還了解了我的邏輯出錯的地方。非常感謝。 –

+0

不客氣:) –

0

如果你想獲得一個資源的id,你應該使用這樣的事情:

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

您可能需要使用的所有圖像的一個數組,並隨機得到它索引:

int[] all = { 
    R.drawable.bg1, 
    R.drawable.bg2, 
}; 
相關問題