Android 如何使用drawable从drawable文件夹获取位图数组形式的所有图像?

Android 如何使用drawable从drawable文件夹获取位图数组形式的所有图像?,android,Android,我使用下面的代码从drawable文件夹中手动指定每个名称,从而获得9个(bird1到bird9)图像 如何使用数组或将R.drawable.bird1替换为变量(,因为下面的语句只接受实际值))来获取数组中的所有9个图像 Drawable myDrawable = ResourcesCompat.getDrawable(getApplicationContext().getResources(), R.drawable.bird1, null); bitmap1 = ((Bit

我使用下面的代码从drawable文件夹中手动指定每个名称,从而获得9个(bird1到bird9)图像

如何使用数组或将R.drawable.bird1替换为变量(,因为下面的语句只接受实际值))来获取数组中的所有9个图像

Drawable myDrawable = ResourcesCompat.getDrawable(getApplicationContext().getResources(), R.drawable.bird1, null);
        bitmap1 = ((BitmapDrawable) myDrawable).getBitmap();
        myDrawable = ResourcesCompat.getDrawable(getApplicationContext().getResources(), R.drawable.bird2, null);
        bitmap2 = ((BitmapDrawable) myDrawable).getBitmap();

您可以尝试使用循环获取可绘制id:

for(int=1; i<=9 ; i++)
{
  getResources().getIdentifier("bird"+i,"drawable",getPackageName());
}

for(int=1;i我让它像这样工作。我相信有人可以做得更好……但这很有效

注意事项:

1) 记住用真实的包名替换“com.example”

2) 将“numberOfBirdsBitmaps=3”替换为您拥有的数量

3) “derp”图像视图仅用于我的测试目的

public class MainActivity extends AppCompatActivity {

int numberOfBirdsBitmaps = 3;

ArrayList<Bitmap> birdBitmapArray = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView derp1 = (ImageView) findViewById(R.id.imageView);
    ImageView derp2 = (ImageView) findViewById(R.id.imageView2);
    ImageView derp3 = (ImageView) findViewById(R.id.imageView3);

    for (int i = 0; i<numberOfBirdsBitmaps; i++) {

        String temporaryString = "bird" + ((Integer) (i+1)).toString();

        int temporaryIdentifier = getResources().getIdentifier(temporaryString, "drawable","com.example");

        Drawable temporaryDrawable = ResourcesCompat.getDrawable(getApplicationContext().getResources(), temporaryIdentifier, null);

        Bitmap temporaryBitmap = ((BitmapDrawable) temporaryDrawable).getBitmap();

        birdBitmapArray.add(temporaryBitmap);

    }

    derp1.setImageBitmap(birdBitmapArray.get(0));

    derp2.setImageBitmap(birdBitmapArray.get(1));

    derp3.setImageBitmap(birdBitmapArray.get(2));


}
}
public类MainActivity扩展了AppCompatActivity{
int numberOfBirdsBitmaps=3;
ArrayList birdBitmapArray=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView derp1=(ImageView)findViewById(R.id.ImageView);
ImageView derp2=(ImageView)findViewById(R.id.imageView2);
ImageView derp3=(ImageView)findViewById(R.id.imageView3);

对于(int i=0;我用
调用“bird”+#
在循环中获取id。它只接受实际值,不接受变量。你是什么意思?请在你的帖子中的额外代码块中显示你尝试的代码。如果答案的海报得到了
273
分,那就好了。你提供的链接是贬值的代码。天哪……如果它有效,请使用它。十年后你可以这么想mething new.而且我不相信我所想的是不推荐的。你应该更具体地说明什么是不推荐的。
记住用你真正的包名替换“com.example”。
否。使用
getPackageName()
,正如你在另一个答案中看到的那样。