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

如何根据整数变量动态设置ImageView的图片资源?

嘿,别担心,这个问题其实挺常见的,我给你捋清楚两种靠谱的实现方式,你可以按需选择~

方案一:用getIdentifier()动态匹配资源(灵活通用)

这是最适合你这种资源命名有规律场景的方法,核心就是通过变量拼接资源名称,再拿到对应的资源ID。

具体步骤和代码示例:

// 假设你的ImageView实例是imageView
int currentLevel = DungeonLevel; // 你的关卡变量
// 拼接出对应的资源名:比如level是5,就得到"d5"
String drawableName = "d" + currentLevel;
// 获取资源ID:三个参数分别是资源名、资源类型(这里是drawable)、你的应用包名
int resId = getResources().getIdentifier(drawableName, "drawable", getPackageName());

// 一定要加判断!如果找不到资源,getIdentifier会返回0,直接设置会崩溃
if (resId != 0) {
    imageView.setImageResource(resId);
} else {
    // 可选:设置一张默认图,或者做其他异常处理
    imageView.setImageResource(R.drawable.default_dungeon);
}

要是你想实现“变量X对应R.drawable.imageX”,只要把drawableName改成"image" + X就行,逻辑完全一样~

方案二:提前创建资源ID数组(性能更优)

如果你的关卡是固定从1到150,而且需要频繁切换图片(比如游戏里实时更新),那推荐用这个方法——因为getIdentifier本质是反射,多次调用会有性能损耗,而数组直接取值更快。

代码示例:

// 先在你的Activity/Fragment里定义一个数组,把所有d1到d150的资源ID都放进去
private int[] dungeonDrawables = {
    R.drawable.d1, R.drawable.d2, R.drawable.d3,
    // ... 依次把R.drawable.d4到R.drawable.d150都列出来
};

// 然后在需要设置图片的地方:
int currentLevel = DungeonLevel;
// 注意数组下标是从0开始的,所以要把level减1
if (currentLevel >= 1 && currentLevel <= 150) {
    imageView.setImageResource(dungeonDrawables[currentLevel - 1]);
} else {
    // 处理level超出1-150范围的情况
    imageView.setImageResource(R.drawable.default_dungeon);
}

几个要注意的小细节:

  • 资源名称大小写完全敏感!比如你的图片是d1,就不能写成D1或者d01,否则会找不到资源
  • 如果是在Fragment里调用getResources(),记得换成requireContext().getResources()或者getActivity().getResources()
  • 不管用哪种方法,都要加范围判断,避免变量超出1-150时出现异常

内容的提问来源于stack exchange,提问作者Ondra Dvořák

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:30:26