[分享] 在ListView顯示網路圖片+快取
看到givemepass及sorrel20567兩位的熱心分享
我也來拋磚引玉一下,一樣是跟ListView有關的東西
請先看過以上兩位對ListView的分享文,會比較容易懂
這篇的重點是在ListView裡顯示網路圖片
並且加到cache裡,如果還在下載就顯示ProgressBar
先自訂一個類別GetWebImg
private HashMap<String, Bitmap> picmap = new HashMap<String, Bitmap>();
//宣告一個HashMap用來存網址及圖片用的
public boolean IsCache(String u){//判斷是否有暫存
return picmap.containsKey(u);
}
public boolean IsDownLoadFine(String u){//判斷圖片是否下載成功
return (picmap.get(u)!= null)?true:false;
}
public boolean IsLoading(String u){//判斷圖片是否下載中
return (IsCache(u)==true && IsDownLoadFine(u)==false)?true:false;
}
public void LoadUrlPic(final String u,final Handler h) {
picmap.put(u,null);//放到暫存的空間
new Thread(new Runnable() {//新開一個執行緒去下載
@Override
public void run() {
Bitmap temp = LoadUrlPic(u);//下載圖片的自訂函數
if (temp == null){//如果下載失敗
picmap.remove(u);//移出暫存空間
h.sendMessage(h.obtainMessage(DOWNLOAD_ERROR,null));
}else{
picmap.put(u, temp);//存起來
h.sendMessage(h.obtainMessage(DOWNLOAD_FINISH,temp));
}
}
}).start();
}
接下來是自訂的BaseAdapter
宣告public ArrayList<String[]> data;//陣列是存網址及文字說明
宣告Handler h = new Handler(){//告訴BaseAdapter資料已經更新了
@Override
public void handleMessage(Message msg) {
notifyDataSetChanged();
super.handleMessage(msg);
}
};
@Override
public View getView(final int position, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
view = mInflater.inflate(R.layout.main_content, null);
holder = new ViewHolder();
holder.text = (TextView) view.findViewById(R.id.main_content_text);
holder.pic = (ImageView) view.findViewById(R.id.main_content_pic);
holder.wait = (ProgressBar) view.findViewById(R.id.main_content_wait);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.text.setText(data.get(position)[0]);//顯示文字說明
holder.pic.setVisibility(View.INVISIBLE);
holder.wait.setVisibility(View.VISIBLE);
if (ImgCache.IsCache(data.get(position)[1]) == false){//如果圖片沒有暫存
ImgCache.LoadUrlPic(data.get(position)[1],h);//下載圖片
}else if (ImgCache.IsDownLoadFine(data.get(position)[1]) == true)
{//如果已經下載完成,就顯示圖片並把ProgressBar隱藏
holder.pic.setImageBitmap(ImgCache.getImg(data.get(position)[1]));
holder.wait.setVisibility(View.GONE);
holder.pic.setVisibility(View.VISIBLE);
}else{
//這裡是下載中,什麼事都不用做
}
return view;
}
以上是部份主要的程式碼
完整的程式碼在↓
http://uploadmirrors.com/download/1CLSSBJP/ListView_WebImg.zip
請大家多指教囉~^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.160.210.180
推
04/22 02:09, , 1F
04/22 02:09, 1F
推
04/22 10:06, , 2F
04/22 10:06, 2F
→
04/22 10:07, , 3F
04/22 10:07, 3F
→
04/22 10:08, , 4F
04/22 10:08, 4F
推
09/13 21:21, , 5F
09/13 21:21, 5F
→
09/13 21:22, , 6F
09/13 21:22, 6F
推
09/13 21:24, , 7F
09/13 21:24, 7F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 3 篇):
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章