作者badhabit (习惯坏习惯)
看板AndroidDev
标题[分享] 在ListView显示网路图片+快取
时间Thu Apr 21 23:14:33 2011
看到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
1F:推 nowar100:已收录 04/22 02:09
2F:推 givemepass:这个很厉害啊...可是我的电脑会变乱码= = 04/22 10:06
3F:→ givemepass:我把程式改成utf-8就好了 :) 04/22 10:07
4F:→ givemepass:请问如果遇到网路慢的图片 下载超过5秒的怎麽办? 04/22 10:08
5F:推 rex1135:不好意思想看一下程式码但是档案都被砍了 囧> 09/13 21:21
6F:→ rex1135:请问有人有备份吗? 谢谢! 09/13 21:22
7F:推 rex1135:阿 原来下一篇就有了XD 09/13 21:24