- 浏览: 374469 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
liqiong0327:
解决了困扰我2天的问题。
Unity3D中 Android插件findviewbyid返回null的解决办法 -
liqiong0327:
大神啊,给跪了!!!!
Unity3D中 Android插件findviewbyid返回null的解决办法 -
wangzhongquan_:
Chrome中canvas上drawImage无法画出image的解决办法 -
deux9876:
为什么position%6(6怎么来的)。还有,为什么判断p= ...
利用convertView优化ListView性能 -
wuweitiandian:
请假一下~如果我不是通过new Images()来加入图片,而 ...
Chrome中canvas上drawImage无法画出image的解决办法
原文分享地址:http://apps.hi.baidu.com/share/detail/34554080
ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,不用让用户等待下去,下面就说实现方法,先贴上主方法的代码:
package cn.wangmeng.test; import Java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftReference; import java.NET.MalformedURLException; import java.net.URL; import java.util.HashMap; import Android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; public class AsyncImageLoader { private HashMap < String, SoftReference < Drawable >> imageCache; public AsyncImageLoader() { imageCache = new HashMap < String, SoftReference < Drawable >> (); } public Drawable loadDrawable( final String imageUrl, final ImageCallback imageCallback) { if (imageCache.containsKey(imageUrl)) { SoftReference < Drawable > softReference = imageCache.get(imageUrl); Drawable drawable = softReference.get(); if (drawable != null ) { return drawable; } } final Handler handler = new Handler() { public void handleMessage(Message message) { imageCallback.imageLoaded((Drawable) message.obj, imageUrl); } }; new Thread() { @Override public void run() { Drawable drawable = loadImageFromUrl(imageUrl); imageCache.put(imageUrl, new SoftReference < Drawable > (drawable)); Message message = handler.obtainMessage( 0 , drawable); handler.sendMessage(message); } }.start(); return null ; } public static Drawable loadImageFromUrl(String url) { URL m; InputStream i = null ; try { m = new URL(url); i = (InputStream) m.getContent(); } catch (MalformedURLException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Drawable d = Drawable.createFromStream(i, " src " ); return d; } public interface ImageCallback { public void imageLoaded(Drawable imageDrawable, String imageUrl); } }
以上代码是实现异步获取图片的主方法,SoftReference是软引用,是为了更好的为了系统回收变量,重复的URL直接返回已有的资源,实现回调函数,让数据成功后,更新到UI线程。
ViewCache是辅助获取adapter的子元素布局
package cn.wangmeng.test; import java.util.List; import cn.wangmeng.test.AsyncImageLoader.ImageCallback; import android.app.Activity; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class ImageAndTextListAdapter extends ArrayAdapter < ImageAndText > { private ListView listView; private AsyncImageLoader asyncImageLoader; public ImageAndTextListAdapter(Activity activity, List < ImageAndText > imageAndTexts, ListView listView) { super (activity, 0 , imageAndTexts); this .listView = listView; asyncImageLoader = new AsyncImageLoader(); } public View getView( int position, View convertView, ViewGroup parent) { Activity activity = (Activity) getContext(); // Inflate the views from XML View rowView = convertView; ViewCache viewCache; if (rowView == null ) { LayoutInflater inflater = activity.getLayoutInflater(); rowView = inflater.inflate(R.layout.image_and_text_row, null ); viewCache = new ViewCache(rowView); rowView.setTag(viewCache); } else { viewCache = (ViewCache) rowView.getTag(); } ImageAndText imageAndText = getItem(position); // Load the image and set it on the ImageView String imageUrl = imageAndText.getImageUrl(); ImageView imageView = viewCache.getImageView(); imageView.setTag(imageUrl); Drawable cachedImage = asyncImageLoader.loadDrawable(imageUrl, new ImageCallback() { public void imageLoaded(Drawable imageDrawable, String imageUrl) { ImageView imageViewByTag = (ImageView) listView.findViewWithTag(imageUrl); if (imageViewByTag != null ) { imageViewByTag.setImageDrawable(imageDrawable); } } }); if (cachedImage == null ) { imageView.setImageResource(R.drawable.default_image); } else { imageView.setImageDrawable(cachedImage); } // Set the text on the TextView TextView textView = viewCache.getTextView(); textView.setText(imageAndText.getText()); return rowView; } }
ImageAndTextListAdapter是实现ListView的Adapter,里面有个技巧就是imageView.setTag(imageUrl),setTag是存储数据的,这样是为了保证在回调函数时,listview去更新自己对应item,大家仔细阅读就知道了。
发表评论
-
Unity3D中 Android插件findviewbyid返回null的解决办法
2013-12-31 10:58 4337最近在给Unity3D接入各个Android ... -
WebView判断手势缩放
2012-09-05 11:42 4893wv.setOnTouchListener(new OnT ... -
Android重启应用程序代码
2012-06-14 10:12 26601很久没有更新,换了家公司,在做手机端的网游,采取的 ... -
[转]开发者须知HTML5的15个新特性
2012-02-23 09:53 2142GR上看到的一篇,当下这类的文章很多,这次只是正好看到一 ... -
打开自己程序下的html文件资源并显示的方法
2012-02-10 16:48 4245在工作中碰到一个情 ... -
Java中的软引用,弱引用和虚引用
2012-01-17 14:38 2039在Android的图片处理中, ... -
Mars视频笔记——Oauth认证(三)
2012-01-04 11:15 1581有了上面Oauth原理,HTTP操作,AsyncTask的基础 ... -
Mars视频笔记——HTTP操作1,2,3
2012-01-04 11:11 13124-7 HTTP操作(一) 1 什么是HTTP协议 ... -
Mars视频笔记——异步操作AsyncTask
2012-01-04 11:09 17114-5 异步操作(一) 1 什么是线程的阻塞 2 什 ... -
Mars视频笔记——Oauth认证原理
2012-01-04 10:56 2445想看一下AsyncTack的使用方法 记得写过什么 但是找了半 ... -
startActivityForResult 和 startActivity
2011-12-08 16:32 2088首先说下这个问题的情景: 当前的软件有一个主Activit ... -
利用convertView优化ListView性能
2011-11-10 11:57 6901有一段时间没更新了 主要生活上出了点状况 然后学习的速度明显下 ... -
Activity中创建Dialog的注意事项(改变Dialog中的message)
2011-09-15 16:00 1994在写一个小游戏的过程中碰到这样一个情况 通过onCreateD ... -
Android中手势监听GestureDetector基础
2011-09-15 11:51 2979最近做的2个东西中都碰到了需要对用户手势输入监听并做出一定的 ... -
Android 同步歌词滚动 唱片手势滑动 原理手记
2011-09-08 14:32 3218刚才误删了一次。。。还好有个打开的页面没关掉 先上效果图 ... -
Android试手——Dota铃声
2011-08-23 15:41 1025手滑先发到博客频道了。。不知道现在这样算不算重复发帖。。 ... -
Android试手——Dota铃声
2011-08-23 15:27 1273前段时间在论坛上看到一个帖子,说了一个关于短信dota铃 ... -
ListView长按获取item的方法
2011-08-12 14:33 2514在做Notes的过程中碰到一个问题 我为ListView的每 ... -
Mars视频笔记——JSON解析
2011-08-04 16:39 1850JSON数据解析 其实关于json在做毕业设计的时候就 ... -
Mars视频笔记——Animation(4)
2011-08-03 14:44 1495Animations使用(4) LayoutAnima ...
相关推荐
"Android实现ListView异步加载图片" Android 实现 ListView 异步加载图片是一种常见的技术,旨在提高应用程序的性能和用户体验。本文将详细介绍 Android 中实现 ListView 异步加载图片的方法,并对相关的技术概念...
这里的“android listView 异步加载图片”指的是在不阻塞UI线程的情况下,从网络、本地存储或其他来源加载图片到ListView中的技术。 这篇名为“ImageLoader”的Java文件很可能就是一个实现图片异步加载的工具类。在...
本文将深入探讨Android ListView中异步加载图片的策略、常见问题以及解决方案。 首先,我们要理解异步加载的基本原理。异步加载是指在后台线程中执行耗时操作,如加载图片,而主线程则继续处理用户交互,保证界面...
本文实例讲述了Android实现Listview异步加载网络图片并动态更新的方法。分享给大家供大家参考,具体如下: 应用实例:解析后台返回的数据,把每条都显示在ListView中,包括活动图片、店名、活动详情、地址、电话和...
Android 异步加载图片,对ListView的异步加载图片的功能演示,主要根据url读取图片返回流的方法。为了方便演示,将请求图片的链接先固定,每读取好一个图片就更新,界面比较简单,当然你可以做成比较好的,像很多好...
为了解决这个问题,我们需要实现ListView的异步加载图片功能。本篇文章将详细介绍如何通过软引用缓存图片,实现高效、流畅的异步加载机制。 一、异步加载原理 异步加载的基本思想是将耗时的操作(如网络请求和图片...
因此,我们需要采用异步加载图片的方式,同时为了优化性能,通常会采用双缓存策略。本文将详细介绍如何在ListView中实现图片的异步加载,并且在用户拖动时不加载,以提高滚动流畅性。 一、异步加载原理 异步加载是...
本实例将详细讲解如何实现“Android ListView异步加载图片”,结合线程池、数据库和本地保存来优化性能。 首先,我们需要理解异步加载的概念。在Android中,由于主线程负责用户界面的更新,因此不应在主线程中执行...
为了解决“android中ListView异步加载图片错位”这一问题,开发者可以采取以下几种策略: 1. 使用 ViewHolder 设计模式:ViewHolder模式能提高ListView的滚动性能,通过缓存convertView中的视图对象,避免了频繁的...
综上所述,实现ListView中的异步加载图片进度条,需要综合运用多线程、图片缓存、UI更新等技术,并遵循良好的代码组织和错误处理原则。通过合理的封装和接口设计,可以使得代码更加规范,同时也提升了用户体验。
10. **总结**:在Android的ListView中实现异步加载网络图片,需要结合异步处理框架、选择合适的图片库、优化缓存策略、合理管理内存,并对ListView进行优化。通过这些手段,可以显著提升应用的性能和用户体验。
通过以上方法,我们可以有效地解决Android ListView中异步加载图片时出现的图片错位问题,提供流畅且高效的用户体验。在实际开发中,应根据项目的具体需求,灵活运用各种策略,实现最佳的图片加载效果。
综上所述,实现Android中ListView全面完美的网络图片异步加载需要结合异步加载库(如Picasso或Glide)、LruCache缓存策略以及动态加载技术。这些方法的运用可以显著提升应用性能,为用户提供流畅的滚动体验,同时...
在本压缩包文件"listview异步加载.rar"中,我们很可能会找到关于如何实现ListView异步加载的相关资料。 在Android中,ListView的异步加载通常涉及以下几个关键知识点: 1. **Adapter**:Adapter是连接ListView与...
这个“android ListView异步加载图片示例”就是为了解决这个问题。 首先,我们要理解ListView的机制。ListView通过复用视图(convertView)来提高性能,即只有当前屏幕可见的几项会创建View,其余的View会在滚动时...