- 浏览: 252226 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (237)
- Android 功能实现 (31)
- sql数据库的学习 (8)
- Android 美化界面 (2)
- Android 优化 (1)
- Ruby on Rails 方面 (45)
- git 方面的学习 (1)
- ruby 编程的琢磨 (13)
- linux下工具软件 (13)
- 操作系统的学习 (40)
- 非技术 (13)
- 网站开发 (18)
- js 学习笔记 (19)
- css学习 (5)
- 回顾总结 (2)
- Delphi 学习 (2)
- C 语言学习笔记 (1)
- 数据结构 (1)
- node js 学习 (6)
- 设计模式 (2)
- mongdb 学习笔记 (0)
- 软件服务 (3)
- osx系统 (4)
- 搜索引擎 (1)
- 测试工具 (1)
- Aliyun (1)
- 前端JS (1)
- python学习 (0)
- iOS系统 (1)
- 分布式锁 (1)
- 开发工具 (0)
- java代码 (2)
- java (1)
最新评论
-
jiguanghover:
写的不错,收藏一下
Ubuntu下RVM, Ruby, rails安装详细 和 卸载 -
maoghj:
回顾总结(二) -
yun2223:
对楼主表示感谢
Android控件开发之Gallery3D效果 -
zw_lovec:
说清楚点吧 亲 加点注释
out of memory -
lzyfn123:
http://www.iteye.com/images/smi ...
ruby-string 字符串的学习
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线程。
几个辅助类文件:
- package cn.wangmeng.test;
- public class ImageAndText {
- private String imageUrl;
- private String text;
- public ImageAndText(String imageUrl, String text) {
- this .imageUrl = imageUrl;
- this .text = text;
- }
- public String getImageUrl() {
- return imageUrl;
- }
- public String getText() {
- return text;
- }
- }
- package cn.wangmeng.test;
- import android.view.View;
- import android.widget.ImageView;
- import android.widget.TextView;
- public class ViewCache {
- private View baseView;
- private TextView textView;
- private ImageView imageView;
- public ViewCache(View baseView) {
- this .baseView = baseView;
- }
- public TextView getTextView() {
- if (textView == null ) {
- textView = (TextView) baseView.findViewById(R.id.text);
- }
- return textView;
- }
- public ImageView getImageView() {
- if (imageView == null ) {
- imageView = (ImageView) baseView.findViewById(R.id.image);
- }
- return imageView;
- }
- }
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,大家仔细阅读就知道了。
最后贴出布局文件:
- <? xml version = "1.0" encoding = "utf-8" ?>
- < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
- android:orientation = "horizontal"
- android:layout_width = "fill_parent"
- android:layout_height = "wrap_content" >
- < ImageView android:id = "@+id/image"
- android:layout_width = "wrap_content"
- android:layout_height = "wrap_content"
- />
- < TextView android:id = "@+id/text"
- android:layout_width = "wrap_content"
- android:layout_height = "wrap_content" />
- </ LinearLayout >
原文地址:http://blog.jteam.nl/2009/09/17/exploring-the-world-of-android-part-2
- AsyncListImage.zip (50.5 KB)
发表评论
-
Android里的音量调节
2013-04-01 13:37 1367步骤1:或许系统音量 ... -
Android Camera 方法分析
2012-03-29 10:52 3531Android Camera源码分析 android通 ... -
MyCameraActivity
2012-03-29 10:10 728package cn.fn; import android. ... -
MyCameraActivity
2012-04-01 13:27 910package cn.fn; import android. ... -
android AutoCompleteTextView+ SQLite
2012-03-21 13:33 1139android AutoCompleteTextView+ S ... -
android 异步回调加载网络图片
2012-03-20 11:50 966在做应用的时候很多时候都会去从网络加载图片,而且还要做各种各样 ... -
ProgressBar+AsyncTask 实现界面数据异步加载
2012-03-20 10:09 1650ProgressBar+AsyncTask 实现界面数据异步 ... -
Android 网络图片异步加载实例
2012-03-20 10:04 1014Android 网络图片异步加载实例 ... -
解决java.lang.OutOfMemoryError
2012-03-19 15:53 1119解决java.lang.OutOfMemoryError ... -
android Text 删除线
2012-03-16 19:35 1200import android.app.Activit ... -
android Gallery 详解
2012-03-14 14:17 1550android Gallery 正文 ... -
Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask,Task,AsynTask等
2012-03-14 11:43 1472Android的线程使用来更新UI----Thread、Han ... -
AsyncTask的使用
2012-03-14 10:59 857AsyncTask的使用 ... -
Android控件开发之Gallery3D效果
2012-03-13 14:38 2977Android控件开发之Gal ... -
android GridView
2012-03-08 10:28 935主类 import android.app.Activi ... -
复制assets下的数据库到SD卡
2012-03-07 10:56 1258首先使用sqliteadDev(一个windows下图形化sq ... -
Android异步加载图像小结
2012-03-06 16:46 628Android异步加载图像小结 (1)由于an ... -
AutoCompleteTextView
2012-03-05 14:53 1458AutoCompleteTextView ... -
android 动态加载List
2012-03-05 11:11 1020main.xml <?xml ver ... -
AutoCompleteTextView
2012-03-02 16:17 1087public class CityAdapter<T& ...
相关推荐
这就是“ListView异步加载图片”这一知识点的核心。 异步加载图片的目的是将耗时的操作(如网络请求、图片解码)从主线程分离到后台线程执行,从而保持用户界面的流畅。在Android中,我们可以使用多种方式实现这一...
"Android实现ListView异步加载图片" Android 实现 ListView 异步加载图片是一种常见的技术,旨在提高应用程序的性能和用户体验。本文将详细介绍 Android 中实现 ListView 异步加载图片的方法,并对相关的技术概念...
本文将深入探讨如何实现ListView中图片的异步加载,并结合进度条显示加载状态,使代码更加规范。 一、异步加载图片的重要性 在Android中,如果直接在主线程中加载大图或数量众多的图片,会导致UI阻塞,用户体验...
这里的“android listView 异步加载图片”指的是在不阻塞UI线程的情况下,从网络、本地存储或其他来源加载图片到ListView中的技术。 这篇名为“ImageLoader”的Java文件很可能就是一个实现图片异步加载的工具类。在...
10. **总结**:在Android的ListView中实现异步加载网络图片,需要结合异步处理框架、选择合适的图片库、优化缓存策略、合理管理内存,并对ListView进行优化。通过这些手段,可以显著提升应用的性能和用户体验。
本实例将详细讲解如何实现“Android ListView异步加载图片”,结合线程池、数据库和本地保存来优化性能。 首先,我们需要理解异步加载的概念。在Android中,由于主线程负责用户界面的更新,因此不应在主线程中执行...
为了解决这个问题,我们需要实现ListView的图片异步加载。本文将深入探讨Android ListView中异步加载图片的策略、常见问题以及解决方案。 首先,我们要理解异步加载的基本原理。异步加载是指在后台线程中执行耗时...
Android 异步加载图片,对ListView的异步加载图片的功能演示,主要根据url读取图片返回流的方法。为了方便演示,将请求图片的链接先固定,每读取好一个图片就更新,界面比较简单,当然你可以做成比较好的,像很多好...
在本压缩包文件"listview异步加载.rar"中,我们很可能会找到关于如何实现ListView异步加载的相关资料。 在Android中,ListView的异步加载通常涉及以下几个关键知识点: 1. **Adapter**:Adapter是连接ListView与...
因此,"ListView异步加载网络图片"是一个重要的优化技巧。 异步加载的基本思路是将图片下载和显示的操作放在后台线程进行,避免占用主线程资源,确保UI的流畅。在Android中,可以使用多种方式实现这一目标,例如...
2. **图片请求**:在ListView的适配器中,对每个ImageView调用异步加载方法,传入图片URL。 3. **异步加载**:在后台线程下载图片,先检查内存缓存,有则直接返回;无则查看磁盘缓存,有则读取并存入内存缓存后返回...
因此,"ListView异步加载图片"是解决这一问题的关键技术。本文将详细介绍如何在ListView中实现图片的异步加载,提升用户体验。 1. **AsyncTask**:Android提供了异步处理任务的工具类AsyncTask,可以用来加载图片。...
在Android中,实现ListView图片异步加载有许多库可以选用,其中一个非常流行的是Universal Image Loader库,对应你提供的压缩包文件名`Android-Universal-Image-Loader-master`。这个库提供了丰富的功能,如缓存机制...
3. **适配器的改造**:ListView的Adapter需要进行相应的改造,以便在获取到数据源后,调用图片库的异步加载方法。通常,我们会在getView()方法中处理图片加载逻辑,当convertView复用时,需要检查图片是否已经加载,...
在Android应用开发中,图片异步加载是一种常见的优化技术,特别是在构建类似照片墙或ListView这样的大量图片展示场景中。这个话题主要关注如何有效地处理图片资源,避免UI阻塞,提高用户体验。以下是对"图片异步加载...
综上所述,这个项目结合了ListView的基本使用、异步加载图片的实现、滑动删除功能的添加以及一些性能优化技巧,提供了一个实用的Android组件示例。对于想要学习这些技术的开发者来说,"ImageloaderDemo"这个压缩包...
本文将详细介绍如何在ListView中实现图片的异步加载,并且在用户拖动时不加载,以提高滚动流畅性。 一、异步加载原理 异步加载是指在后台线程中执行耗时操作,例如网络请求或解码图片,避免阻塞主线程。Android提供...