Android讀取assets目錄下的所有圖片并顯示的方法
本文實(shí)例講述了Android讀取assets目錄下的所有圖片并顯示的方法。分享給大家供大家參考。具體方法分析如下:
在assets文件夾里面的文件都是保持原始的文件格式,需要用AssetManager以字節(jié)流的形式讀取文件。
1. 先在Activity里面調(diào)用getAssets() 來(lái)獲取AssetManager引用。
2. 再用AssetManager的open(String fileName, int accessMode) 方法則指定讀取的文件以及訪問(wèn)模式就能得到輸入流InputStream。
3. 然后就是用已經(jīng)open file 的inputStream讀取文件,讀取完成后記得inputStream.close() 。
4.調(diào)用AssetManager.close() 關(guān)閉AssetManager。
需要注意的是,來(lái)自Resources和Assets 中的文件只可以讀取而不能進(jìn)行寫的操作。
下面看一下在Activity中使用的示例代碼:
String[] list_image = null;
try {
//得到assets/processedimages/目錄下的所有文件的文件名,以便后面打開(kāi)操作時(shí)使用
list_image = context.getAssets().list("processedimages");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for(int i=0;i<list_image.length;++i)
{
InputStream open = null;
try {
String temp = "processedimages/"+list_image[i];
open = context.getAssets().open(temp);
Bitmap bitmap = BitmapFactory.decodeStream(open);
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", list_image[i]);
map.put("iv", bitmap);
map.put("bg", R.drawable.phone_vip_yes);
map.put("cate_id",i);
cateList.add(map);
// Assign the bitmap to an ImageView in this layout
} catch (IOException e) {
e.printStackTrace();
} finally {
if (open != null) {
try {
open.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
這樣所有的map中的關(guān)鍵字“iv"處理論上就保存了我們讀取的bitmap,可以結(jié)果并非如此,大家應(yīng)該注意到了在”bg“關(guān)鍵字處我們也保存了一個(gè)圖片,只不過(guò)它是通過(guò)R.drawable.方式獲取的,實(shí)驗(yàn)證明這種方式是可以成功讀取并顯示的。為什么從assets中讀取的bitmap不能顯示呢?
解決辦法是:
實(shí)現(xiàn) ViewBinder接口,對(duì)兩種的資源id和bitmap 情況進(jìn)行說(shuō)明:
@Override
public boolean setViewValue(
View view,
Object data,
String textRepresentation) {
// TODO Auto-generated method stub
if((view instanceof ImageView) && (data instanceof Bitmap)) {
ImageView imageView = (ImageView) view;
Bitmap bmp = (Bitmap) data;
imageView.setImageBitmap(bmp);
return true;
}
return false;
}
});
這樣就可以了。
還有一種情況是,我們?cè)诜茿ctivity類中讀取assets文件下的內(nèi)容,這個(gè)時(shí)候就得把調(diào)用者(Activity類)的context傳遞過(guò)去,然后在這個(gè)非Activity類中使用context.getAssets()方式調(diào)用就行了。
舉個(gè)簡(jiǎn)單例子:
我們有一個(gè)HomeActivity,然后我們它里面調(diào)用GetData.initdata(HomeActivity.this).
在GetData類的initdata方法肯定是這樣定義的:
{
//other codes...
String[] list_image = null;
try {
//得到assets/processedimages/目錄下的所有文件的文件名,以便后面打開(kāi)操作時(shí)使用
list_image = context.getAssets().list("processedimages");//attention this line
} catch (IOException e1)
{
e1.printStackTrace();
}
//other codes.....
}
因?yàn)間etAssets方法是Context下的方法,在非Activity類中是不能直接使用的。
希望本文所述對(duì)大家的Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android水波紋載入控件CircleWaterWaveView使用詳解
這篇文章主要為大家詳細(xì)介紹了Android水波紋載入控件CircleWaterWaveView使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Android自定義View實(shí)現(xiàn)帶4圓角或者2圓角的效果
這篇文章主要介紹了Android自定義View實(shí)現(xiàn)帶4圓角或者2圓角的效果,本文通過(guò)實(shí)例代碼截圖給大家展示的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
詳解 Android中Libgdx使用ShapeRenderer自定義Actor解決無(wú)法接收到Touch事件的問(wèn)題
這篇文章主要介紹了詳解 Android中Libgdx使用ShapeRenderer自定義Actor解決無(wú)法接收到Touch事件的問(wèn)題的相關(guān)資料,希望通過(guò)本文能幫助到大家解決這樣的問(wèn)題,需要的朋友可以參考下2017-09-09
Android開(kāi)發(fā)之高德地圖實(shí)現(xiàn)定位
本篇文章主要介紹了Android中高德地圖實(shí)現(xiàn)定位的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
Android Color顏色過(guò)度計(jì)算實(shí)現(xiàn)代碼
這篇文章主要介紹了Android Color顏色過(guò)度計(jì)算實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-06-06
Android自定義TextView實(shí)現(xiàn)文字圖片居中顯示的方法
下面小編就為大家分享一篇Android自定義TextView實(shí)現(xiàn)文字圖片居中顯示的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Flow轉(zhuǎn)LiveData數(shù)據(jù)丟失原理詳解
這篇文章主要為大家介紹了Flow轉(zhuǎn)LiveData數(shù)據(jù)丟失原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android SharedPreferences數(shù)據(jù)存儲(chǔ)詳解
SharedPreferences是安卓平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,用來(lái)保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再?gòu)腟haredPreferences中將值取出2022-11-11

