2010-01-24 18 views
5

我有很長的一系列圖形 - icon1_0.png,icon1_1.png,icon1_2.png ...,icon12_0.png,icon12_1.png,icon12_2.png - 和I' d喜歡用我的android應用程序打包它們。理想情況下,我認爲我應該能夠將它們作爲資源加載,但資源ID被設置爲java標識符。當然,Java標識符不能在運行時組裝。我要問R.drawable.icon12_00所以我不能建立一個循環在Android上批量獲取多個位圖資源

for(int icon=0;icon<12;icon++) 
for(int frame=0;frame<3;frame++) 
    //syntax error obviously 
    BitmapFactory.decodeResource(getResources(), R.drawable."icon" + icon + "_" + frame + ".png"); 

那麼,有沒有辦法通過自己的名字來獲得資源?更好的是,資源系統之外是否有一種規範的方式將數據文件打包到android應用程序包中,以便我可以查看它們?

我正在考慮反思,但這似乎不是對我來說正確的解決方案。

回答

13

Context(例如Activity)使用getResources().getIdentifier()(例如,Activity),但是如果您將多次使用它,請緩存結果。 getIdentifier()Resources上實施。

+0

好的,這個工程。 getIdentifier(「resname」,「restype」,「com.domain.appname」);謝謝。 – Brian 2010-01-24 22:51:10

+1

改爲將包名稱作爲靜態值傳遞,您可以使用'getPackageName()' – 2012-01-05 09:11:39

6

我知道你已經找到了答案,但如果你使用反射,那麼你會看到一個很好的速度增加,因爲getIdentifier()更慢。我寫了關於如何做反射方法here。但是,這隻有在您訪問自己的資源時纔有效。

+0

那怎麼樣。這有點快。然而,這是一種恥辱,因爲反射是非常糟糕的,所以getIdentifier一定是怪異的緩慢。 – Brian 2010-01-26 02:56:45

2

反射速度也很慢,您應該創建一個包含所有標識的數組。

+2

你的意思是,只需在代碼中寫出整個循環?或更聰明的東西?我會對後者感興趣,因爲如果我能夠比使用反射獲得資源更快,那麼它會是一個很好的速度提升(但是,這會在稍微不同的情況下,應用程序數據指的是資源 - 而不是代碼) 。 – 2010-01-25 17:08:28

+0

@DanielLew他說你有一個代碼生成器,它將整個循環寫入代碼中 – Pacerier 2012-02-17 00:59:29