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

如何利用字符串动态设置ImageView加载Drawable中的扑克牌图片?

解决方案

方法一:通过字符串转资源ID(适配现有HashMap)

你现在的核心问题是setImageResource需要的是R.drawable.xxx对应的整数资源ID,而非图片文件名字符串。可以通过getResources().getIdentifier()方法将文件名转换为资源ID,步骤如下:

  1. 先去掉文件名的.png后缀(R.drawable中的资源名不带文件后缀)
  2. 调用getIdentifier获取对应的资源ID
  3. 检查ID有效性后,设置到ImageView中

示例代码:

// 从HashMap获取带后缀的文件名,比如"clubsace.png"
String imgFileName = cards.get(1);
// 移除.png后缀,得到资源名"clubsace"
String imgResName = imgFileName.replace(".png", "");

// 根据资源名获取drawable的资源ID
int resId = getResources().getIdentifier(imgResName, "drawable", getPackageName());

// 检查资源是否存在,避免无效ID导致崩溃
if (resId != 0) {
    dealt2.setImageResource(resId);
} else {
    // 可选:设置默认占位图
    dealt2.setImageResource(R.drawable.default_card);
}

方法二:直接在HashMap中存储资源ID(更高效推荐)

如果可以调整HashMap的结构,建议直接将数字映射到R.drawable的整数ID,这样省去字符串转ID的运行时开销,代码也更简洁:

// 初始化HashMap,直接存储资源ID
HashMap<Integer, Integer> cards = new HashMap<>();
cards.put(1, R.drawable.clubsace);
cards.put(2, R.drawable.clubs2);
// ... 依次添加剩余50张牌的资源ID

// 使用时直接获取ID设置到ImageView
Integer cardResId = cards.get(yourCardNumber);
if (cardResId != null) {
    dealt2.setImageResource(cardResId);
}

注意事项

  • getIdentifier方法找不到对应资源时会返回0,必须添加非0判断,防止应用崩溃
  • 方法二性能更优,因为直接使用编译时生成的资源ID,无需运行时查找资源名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:32:44