[分享] 在ListView顯示網路圖片+快取

看板AndroidDev作者 (習慣壞習慣)時間13年前 (2011/04/21 23:14), 編輯推噓4(403)
留言7則, 3人參與, 最新討論串1/3 (看更多)
看到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
我把程式改成utf-8就好了 :)
04/22 10:07, 3F

04/22 10:08, , 4F
請問如果遇到網路慢的圖片 下載超過5秒的怎麼辦?
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
阿 原來下一篇就有了XD
09/13 21:24, 7F
文章代碼(AID): #1Di4dTki (AndroidDev)
文章代碼(AID): #1Di4dTki (AndroidDev)