如何在Android中延迟加载ListView中的图像

我正在使用列表视图显示一些与这些图像相关的图像和字幕。我正在从互联网上获取图像。有没有办法延迟加载图像,以便在文本显示时,UI不会被阻止,图像在下载时显示

图像的总数不是固定的

下面是我创建用来保存我的应用程序当前显示的图像的内容。请注意,这里使用的“Log”对象是我在Android内部最后一个Log类周围的自定义包装器

包com.wilson.android.library;
/*
Apache软件基金会(ASF)下一个或多个许可
贡献者许可协议。见通知文件
与此工作一起分发以获取更多信息
关于版权所有权。ASF许可此文件
根据Apache许可证,版本2.0(
“许可证”);除非符合规定,否则您不得使用此文件
带着执照。您可以通过以下方式获得许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,
根据许可证分发的软件在
“按原样”的基础上,没有任何
种类,无论是明示的还是暗示的。请参阅许可证以获取详细信息
管理权限和限制的特定语言
根据许可证。
*/
导入java.io.IOException;
公共类DrawableManager{
私有最终地图<字符串,可绘制>可绘制地图;
公共提款经理(){
drawableMap=新HashMap<字符串,drawableMap>();
}
公共可提取可提取(字符串urlString){
if(drawableMap.containsKey(urlString)){
返回drawableMap.get(urlString);
}
Log.d(this.getClass().getSimpleName(),“图像url:+urlString”);
试一试{
InputStream is=fetch(urlString);
Drawable Drawable=Drawable.createFromStream(是“src”);
如果(可绘制!=null){
drawableMap.put(urlString,drawable);
Log.d(this.getClass().getSimpleName(),“获得了可绘制的缩略图:“+drawable.getBounds()+”,”
+drawable.getIntrinsicHeight()+”,“+drawable.getIntrinsicWidth()+”,”
+可绘制的.getMinimumHeight()+”,“+drawable.getMinimumWidth());
}否则{
Log.w(this.getClass().getSimpleName(),“无法获取缩略图”);
}
回拉;
}捕获(格式错误){
Log.e(this.getClass().getSimpleName(),“fetchDrawable失败”,e);
返回null;
}捕获(IOE异常){
Log.e(this.getClass().getSimpleName(),“fetchDrawable失败”,e);
返回null;
}
}
public void fetchDrawableOnThread(最终字符串urlString,最终图像视图ImageView){
if(drawableMap.containsKey(urlString)){
setImageDrawable(drawableMap.get(urlString));
}
最终处理程序=新处理程序(){
@凌驾
公共无效handleMessage(消息消息){
setImageDrawable((Drawable)message.obj);
}
};
线程线程=新线程(){
@凌驾
公开募捐{
//TODO:将imageView设置为“挂起”图像
Drawable Drawable=fetchDrawable(urlString);
Message Message=handler.getainmessage(1,可绘制);
handler.sendMessage(message);
}
};
thread.start();
}
私有InputStream获取(字符串urlString)引发错误的InputStream异常,IOException{
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpGet请求=新的HttpGet(urlString);
HttpResponse response=httpClient.execute(请求);
返回response.getEntity().getContent();
}
}

发表评论