安卓如何迭代R.drawable对象

3
我想展示一帧一帧的动画,并希望通过迭代drawable来避免在帧数增加时手动输入所有名称。但是我似乎找不到如何迭代drawable的方法。我已经查阅了相当多的Java循环教程,但它们都只是打印信息,(据我所知)无法在此处使用。这里是相关代码(图像的名称为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());
   }

谢谢!


起始的 Runnable 包含什么? - JRaymond
你可以使用 getIdentifier() 方法来获取 drawable 的 id。 - Emran
3个回答

6

我认为上一条回答基本不正确,但也有可能是:

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

2

试试这个。 getResources() 需要一个上下文(context)。

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

在这里,我假设有10个帧(i<10)。


这给了我下一个错误: 类型AnimationDrawable中的方法addFrame(Drawable,int)不适用于参数(int,int)。 - Mats Raemen

1

我使用了 Simon 的答案来遍历我的可绘制对象,它们的名称是从 "c1" 到 "c54" 并且已经放置在一个数组中。这是我刚刚使用的代码,它对我很有效。

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

之前,我手动输入它们,这样做占用了太多的空间,不符合我的口味。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接