今天遇到一個(gè)奇怪的需求监憎,根據(jù)文件名稱來(lái)設(shè)置本地圖片
詳細(xì)解釋一下就是:提前把N張圖片放到 本地的drawable目錄中射赛,然后根據(jù)服務(wù)器返回的文件名稱來(lái)展示對(duì)應(yīng)的圖片
思路分析:Android中獲取到各種圖片資源也好,文字資源也罷现诀,我們常見(jiàn)的findViewById操作也一樣,最終都是通過(guò)資源(控件)的Id來(lái)找到對(duì)應(yīng)的對(duì)象的,如果我們能通過(guò)圖片名稱獲取到圖片的id笙纤,那么我的需求即可實(shí)現(xiàn)
然后,我打開(kāi)了萬(wàn)能的百度
經(jīng)過(guò)抄襲和驗(yàn)證组力,下面兩個(gè)方法均可使用
方法一
/**
* 獲取圖片名稱獲取圖片的資源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之后燎字,那么我們就可以根據(jù)id拿到這個(gè)圖片腥椒,拿到了圖片我們就能把這種圖片設(shè)置給我們的imageView了
示例代碼
//獲取圖片控件
ImageView ivTest= findViewById(R.id.ivTest);
// 獲取ic_launcher.png的id
int resource = getResourceId("ic_launcher");
// 根據(jù)圖片的id獲取到這張圖片
Drawable drawable = getResources().getDrawable(resource);
// 把圖片設(shè)置給imageView
ivTest.setImageDrawable(drawable);