2011-07-11 53 views
3

我的目標是將某些drawable的所有int ID存儲在TypedArray中,以便我可以按順序訪問這些ID。例如:如何在XML TypedArray中存儲drawable的int ID

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <array 
     name="bitmap_ids"> 
     <item>@drawable/icon1</item> 
     <item>@drawable/icon2</item> 
     <item>@drawable/icon3</item> 
     <item>@drawable/icon4</item> 
     <item>@drawable/icon5</item> 
    </array> 
</resources> 

這不屈服,我在尋找這樣我以後可以做一些事情,如INT結果:

TypedArray typedArray = mResources.obtainTypedArray(R.array.bitmapIds); 
int[][] t = new int[width][height]; 
int index = 0; 
for (int i = 0; i < width; i++) 
    for (int j = 0; j < height; j++) { 
     t[i][j] = typedArray.getInt(index, -1); 
     index++; 
    } 

,甚至更高:

return BitmapFactory.decodeResource(mResources, t[x][y]); 

這相當於:

return BitmapFactory.decodeResource(mResources, R.drawable.icon1); 

任何暗示或洞察力將不勝感激。提前致謝。

+0

我不知道你是否可以這樣做,但也可以添加一個索引給你可繪製的名稱並使用反射來加載它們。 – mibollma

+0

那麼我可以存儲一個名稱的字符串數組,並使用int resID = getResources()。getIdentifier(「button_%i」, 「id」,「your.package.name」);這會給我一個int ID,但我希望有一個更優雅的解決方案,因爲如果有大量資源,那種類型的方法調用會大大降低性能。 –

回答

5

我可能會誤解你的問題,但這個工作對我來說

for (int i = 0; i < width; i++) { 
    for (int j = 0; j < height; j++) { 
    t[i][j] = typedArray.getResourceId(index++, 0); 
    } 
} 

TypedArray.getResourceId()彷彿回到瞭解決資源ID。使用類型數組BitmapFactory.decodeResource(getResources(), t[0][0])中的@ drawable/name條目繪製正確的資源。

+0

就是這樣!我完全錯過了這個方法......哈哈。感謝您爲我指點。 –