Android Studio实现老虎机功能时ImageView设置图片资源遇参数类型问题求助
Android Studio实现老虎机功能时ImageView设置图片资源遇参数类型问题求助
嘿,太懂你这种想实现功能却被参数类型卡壳的郁闷了!你现在的核心问题是**setImageResource()方法只接受int类型的图片资源ID**(比如R.drawable.cachorro这种系统自动生成的资源标识),但你现在传的是字符串格式的文件名,类型完全不匹配,自然用不了啦~
先给你指出代码里的一个小错误:你写的slot1.setImageResource(R.id.um);里的R.id.um是控件的ID,不是图片资源的ID,这俩完全是两回事哦,要区分开R.id(布局控件的标识)和R.drawable(drawable目录下图片的标识)。
下面给你两种实用的解决办法,按需选就行:
方法一:把字符串文件名转成资源ID(适合已经用字符串数组存文件名的情况)
用getResources().getIdentifier()方法可以把字符串格式的文件名转换成对应的资源ID,具体代码可以这么写:
// 先把文件名的后缀去掉(比如"cachorro.jpg"变成"cachorro") String imageName = um.substring(0, um.lastIndexOf(".")); // 获取对应的drawable资源ID int resId = getResources().getIdentifier(imageName, "drawable", getPackageName()); // 一定要判断资源是否存在,避免找不到资源导致崩溃 if (resId != 0) { slot1.setImageResource(resId); } else { // 如果找不到对应的图片,可以设置一张默认图兜底 slot1.setImageResource(R.drawable.default_image); }
⚠️ 注意:这里的文件名要和你drawable目录下的图片文件名完全一致(包括大小写),不然会找不到资源返回0哦。
方法二:直接用资源ID数组(更推荐,更稳定)
其实完全没必要用字符串数组存文件名,直接用int类型的资源ID数组更靠谱,编译时系统会自动检查资源是否存在,不容易出错:
// 直接定义图片资源ID的数组,前提是这些图片已经放在drawable目录下 int[] animaisResIds = {R.drawable.cachorro, R.drawable.gato, R.drawable.pato, R.drawable.tartaruga}; // 随机获取一个资源ID的索引 int um1 = rd.nextInt(animaisResIds.length); // 直接设置给ImageView就好啦 slot1.setImageResource(animaisResIds[um1]);
这种方法不仅代码更简洁,还能避免字符串拼写错误、大小写不匹配等问题,特别适合你做老虎机这种需要随机取图的场景~
试试上面的方法,应该就能顺利设置图片啦,祝你老虎机功能早日做出来🥳
备注:内容来源于stack exchange,提问作者Vini
相关产品推荐
相关产品推荐

