今天遇到一个奇怪的需求,根据文件名称来设置本地图片
详细解释一下就是:提前把N张图片放到 本地的drawable目录中,然后根据服务器返回的文件名称来展示对应的图片
思路分析:Android中获取到各种图片资源也好,文字资源也罢,我们常见的findViewById操作也一样,最终都是通过资源(控件)的Id来找到对应的对象的,如果我们能通过图片名称获取到图片的id,那么我的需求即可实现
然后,我打开了万能的百度
经过抄袭和验证,下面两个方法均可使用
方法一
/**
* 获取图片名称获取图片的资源id的方法
*
* @param imageName 图片的名称,注意不用加图片的后缀
* @return 返回图片资源的id
*/
public int getResourceId(String imageName) {
Context ctx = getBaseContext();
int resId = getResources().getIdentifier(imageName, "drawable", ctx.getPackageName());
return resId;
}
方法二
/**
* 获取图片名称获取图片的资源id的方法
*
* @param imageName 图片的名称,注意不用加图片的后缀
* @return 返回图片资源的id
*/
public int getResourceId(String imageName) {
Field field = null;
try {
field = R.drawable.class.getDeclaredField(imageName);
int resId = field.getInt(field.getName());
return resId;
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return -1;
}
拿到了图片的id之后,那么我们就可以根据id拿到这个图片,拿到了图片我们就能把这种图片设置给我们的imageView了
示例代码
//获取图片控件
ImageView ivTest= findViewById(R.id.ivTest);
// 获取ic_launcher.png的id
int resource = getResourceId("ic_launcher");
// 根据图片的id获取到这张图片
Drawable drawable = getResources().getDrawable(resource);
// 把图片设置给imageView
ivTest.setImageDrawable(drawable);