You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Drawable从drawable文件夹批量获取bird系列图片为Bitmap数组?

嘿,这个场景我太熟悉了!手动写9次重复代码不仅麻烦,后期维护也头疼,我们可以通过动态获取资源ID或者预定义资源ID数组的方式来批量加载这些图片,直接把它们存进Bitmap数组里,给你两种实用方案:

方案一:动态生成资源名获取ID(灵活但稍慢)

这种方法适合资源命名有规律的场景(比如你的bird1到bird9),通过字符串拼接生成资源名,再用getIdentifier()动态拿到对应的资源ID,循环加载即可:

// 初始化Bitmap数组,长度对应图片数量
Bitmap[] birdBitmaps = new Bitmap[9];
Resources res = getApplicationContext().getResources();
String packageName = getApplicationContext().getPackageName();

for (int i = 0; i < 9; i++) {
    // 拼接资源名:bird1、bird2...bird9
    String drawableName = "bird" + (i + 1);
    // 获取资源ID:参数分别是资源名、资源类型、包名
    int drawableId = res.getIdentifier(drawableName, "drawable", packageName);
    
    if (drawableId != 0) { // 检查资源是否存在,避免空指针
        Drawable drawable = ResourcesCompat.getDrawable(res, drawableId, null);
        birdBitmaps[i] = ((BitmapDrawable) drawable).getBitmap();
    } else {
        // 资源不存在时的容错处理,比如打印日志或设置默认图
        Log.e("BitmapLoader", "未找到资源:" + drawableName);
        birdBitmaps[i] = null; // 或者替换成默认Bitmap
    }
}

注意点:

  • getIdentifier()是通过反射实现的,性能比直接用R.drawable.ID稍差,如果图片数量很多,更推荐方案二
  • 资源名必须和drawable文件夹里的文件名完全一致(Android资源名不区分大小写,但最好统一小写)
  • 返回值为0表示未找到对应资源,一定要做容错处理,避免崩溃

方案二:预定义资源ID数组(高效推荐)

如果你的图片数量固定,直接把所有R.drawable.birdX的ID放进数组,循环加载即可。这种方法没有反射开销,性能更优:

// 提前把所有bird图片的资源ID存入数组
int[] birdDrawableIds = {
    R.drawable.bird1,
    R.drawable.bird2,
    R.drawable.bird3,
    R.drawable.bird4,
    R.drawable.bird5,
    R.drawable.bird6,
    R.drawable.bird7,
    R.drawable.bird8,
    R.drawable.bird9
};

Bitmap[] birdBitmaps = new Bitmap[birdDrawableIds.length];
Resources res = getApplicationContext().getResources();

for (int i = 0; i < birdDrawableIds.length; i++) {
    Drawable drawable = ResourcesCompat.getDrawable(res, birdDrawableIds[i], null);
    birdBitmaps[i] = ((BitmapDrawable) drawable).getBitmap();
}

额外提示:

如果你的图片是VectorDrawable(矢量图),直接强转BitmapDrawable会报错,需要先把矢量图转换成Bitmap,比如用Bitmap.createBitmap()配合Canvas绘制的方式处理,不过看你的代码应该是普通位图,这个可以暂时忽略~

内容的提问来源于stack exchange,提问作者techno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:25:21