2012-03-30 100 views
3

我試圖通過框架動畫顯示一個框架,並且想要遍歷drawables,因此我不必在框架數量增加的情況下鍵入所有名稱。Android如何迭代一個R.drawable對象

但是我似乎無法找到如何遍歷drawables。我已經查找了一些java for循環教程,但他們都只是印刷了(據我所知)不必在這裏使用的東西。

下面是相關的代碼(圖像的名稱是dude1,dude2,...):

private void startAnimation(){ 
     animation = new AnimationDrawable(); 
     for (int i = 1; i < 4; i++) { 
      animation.addFrame(getResources().getDrawable(R.drawable.dude(i)), 100); 
     } 
     animation.setOneShot(true); 

     ImageView imageView = (ImageView) findViewById(R.id.img); 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(80, 90); 
     params.alignWithParent = true; 
     params.addRule(RelativeLayout.CENTER_IN_PARENT);  
     imageView.setLayoutParams(params); 
     imageView.setImageDrawable(animation); 
     imageView.post(new Starter()); 
    } 

THX!

+0

啓動器Runnable中有什麼? – JRaymond 2012-03-30 18:02:16

+0

您可以使用getIdentifier()方法獲取drawable的id。 – Emran 2012-03-30 18:03:58

回答

2

試試這個。 getResources()需要一個上下文。

for (int i=0;i<10;i++){ 
    animation.addFrame(getResources().getIdentifier("dude" + i,"drawable", getPackageName()),100); 
} 

在此,我已假定10幀(I < 10)。

+0

這給了我下一個錯誤: AnimationDrawable類型中的方法addFrame(Drawable,int)不適用於參數(int,int) – 2012-03-30 18:32:16

6

我認爲最後的答案是varely真實的,但它可能是:

for (int i=0; i <10;i++){ 
     animation.addFrame(
     getResources().getDrawable(getResources().getIdentifier("dude" + i,"drawable", 
      getPackageName()),100); 
} 
1

我用西蒙的回答是通過我的繪項目被命名爲‘C1’到‘C54’,並放置到迭代在一個數組中。這是我剛剛使用的代碼,適用於我。

private void getDeckDrawables() { 
    for (int i=0; i<54; i++){ 
     int j = i + 1; 
     intArrDeck[i] = getResources().getIdentifier("c"+j,"drawable",getPackageName()); 
    } 
} 

以前,我手動輸入他們這佔去了我的口味太多空間。

private void getDeckDrawables() { 
    intArrDeck[0]=R.drawable.c1; 
    intArrDeck[1]=R.drawable.c2; 
    intArrDeck[2]=R.drawable.c3; 
}