2015-06-21 69 views
0

我正在製作一款益智應用程序,並希望允許拼圖的多種不同配置,包括正在使用的不同圖像。考慮這樣的資源名稱:是基於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) 

這甚至可能嗎?

回答

0

花了一段時間,但我終於找到了這個信息。訣竅是使用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,但這又會給程序增加不必要的開銷。

Final注意:「可繪製」表示您指定的資源類型。我指出了這一點,因爲我發現使用「字符串」的例子。在一個特別壯觀的骨頭顯示中,我認爲這是表明你試圖存儲這個變量的變量的類型。正如你所猜測的那樣,我做了相當多的運算來找出錯誤。