Android ListView实现ImageLoader图片加载的方法

本文实例讲述了Android ListView实现ImageLoader图片加载的方法。分享给大家供大家参考,具体如下:

最近一直忙着做项目,今天也是忙里偷闲,想写篇博客来巩固下之前在应用中所用的知识。之前我们可能会也会肯定遇到了图片的异步加载问题,然而我们也可能会遇到图片二次或多次加载,这是ListView的特性造成的,具体原因不在这里讨论,又或者是OOM等问题。今天要讲的是一个开源框架Imageloader,个人觉得非常的好用。

该框架在github的地址。https://github.com/nostra13/Android-Universal-Image-Loader。我们可以先看看这个开源库存在哪些特征:

① .多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
② .支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
③ . 支持图片的内存缓存,文件系统缓存或者SD卡缓存
④ .支持图片下载过程的监听
⑤ .根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
⑥ .较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
⑦ .提供在较慢的网络下对图片进行加载

下面就直接进入正题:

1.我们需要去github下载imageloader的jar包,网址上面已经给了,然后放在你的开发环境中,具体怎么操作大家都会的。

2.配置Android Manifest文件

<manifest>
 <uses-permission android:name="android.permission.INTERNET" />
 <!-- Include next permission if you want to allow UIL to cache images on SD card -->
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 ...
 <application android:name="MyApplication">
  ...
 </application>
</manifest>

3.首先我们要新建一个MyApplication,继承于application,在oncreate进行配置ImageLoader配置。你可以参照下面的代码。

private void initImageLoader(Context context) {
  ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
  config.threadPoolSize(3);
  config.memoryCache(new WeakMemoryCache());
  config.threadPriority(Thread.NORM_PRIORITY - 2);
  config.denyCacheImageMultipleSizesInMemory();
  config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
  config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
  config.tasksProcessingOrder(QueueProcessingType.LIFO);
  ImageLoader.getInstance().init(config.build());
}

在onCreate中调用下即可。

4.设置图片显示属性

DisplayImageOptions options=new DisplayImageOptions.Builder()
// .showStubImage(R.mipmap.ic_launcher)   // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
//.showImageOnFail(R.mipmap.ic_launcher)  // 设置图片加载或解码过程中发生错误显示的图片
.cacheInMemory(true)      // 设置下载的图片是否缓存在内存中
.cacheOnDisc(true)      // 设置下载的图片是否缓存在SD卡中
.build();        // 创建配置过得DisplayImageOption对象

5.通过调用displayImage来显示图片

ImageLoader.getInstance().displayImage(url,viewHolder.imageView,options);
//第一个参数,图片地址URL;第二个参数:布局控件;第三个参数:图片属性。

这样就可以完成图片的加载。

当然 这样做会有个小问题,就是图片会加载两次。原因是下载图片之前会缓存一次,后面又会缓存一次,具体原因可以自行百度。我就不在这里讨论了。只需要把上面的代码换成下面这个就好了。直接上代码

ImageLoader.getInstance().displayImage
    (url,new ImageViewAware(viewHolder.imageView,false),options);//解决图片重复加载问题

好了 ,Imageloader就讲到这里了 ,有什么问题还希望大家指出来。

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android开发之ImageLoader本地缓存

    ImageLoader是一个图片缓存的开源库,提供了强大的图片缓存机制,很多开发者都在使用,今天给大家介绍Android开发之ImageLoader本地缓存,具体内容如下所示: 本地缓存在缓存文件时对文件名称的修改提供了两种方式,每一种方式对应了一个Java类 1) HashCodeFileNameGenerator ,该类负责获取文件名称的hashcode然后转换成字符串. 2) Md5FileNameGenerator ,该类把源文件的名称同过md5加密后保存. 两个类都继承了FileNam

  • Android Imageloader的配置的实现代码

    Android Imageloader的配置的实现代码   ImageLoader 优点 (1) 支持下载进度监听 (2) 可以在 View 滚动中暂停图片加载 通过 PauseOnScrollListener 接口可以在 View 滚动中暂停图片加载. (3) 默认实现多种内存缓存算法 这几个图片缓存都可以配置缓存算法,不过 ImageLoader 默认实现了较多缓存算法,如 Size 最大先删除.使用最少先删除.最近最少使用.先进先删除.时间最长先删除等. (4) 支持本地缓存文件名规则定义

  • 从源代码分析Android Universal ImageLoader的缓存处理机制

    通过本文带大家一起看过UIL这个国内外大牛都追捧的图片缓存类库的缓存处理机制.看了UIL中的缓存实现,才发现其实这个东西不难,没有太多的进程调度,没有各种内存读取控制机制.没有各种异常处理.反正UIL中不单代码写的简单,连处理都简单.但是这个类库这么好用,又有这么多人用,那么非常有必要看看他是怎么实现的.先了解UIL中缓存流程的原理图. 原理示意图 主体有三个,分别是UI,缓存模块和数据源(网络).它们之间的关系如下: ① UI:请求数据,使用唯一的Key值索引Memory Cache中的Bit

  • Android开发之ImageLoader使用详解

    先给大家展示效果图,看看是大家想要的效果吗,如果还满意,请参考以下代码: 前言 UniversalImageLoader是用于加载图片的一个开源项目,在其项目介绍中是这么写的, •支持多线程图片加载 •提供丰富的细节配置,比如线程池大小,HTPP请求项,内存和磁盘缓存,图片显示时的参数配置等等: •提供双缓存 •支持加载过程的监听: •提供图片的个性化显示配置接口: •Widget支持(这个,个人觉得没必要写进来,不过尊重原文) 其他类似的项目也有很多,但这个作为github上著名的开源项目被广

  • Android ImageLoader第三方框架解析

    本文实例为大家分享了Android ImageLoader框架的使用方法,供大家参考,具体内容如下 1.准备工作 1)导入universal-image-loader-1.9.5.jar到项目中 2)创建MyApplication继承Application,在oncreate()中初始化ImageLoader public class MyApplication extends Application { @Override public void onCreate() { super.onCr

  • Android Universal ImageLoader 缓存图片

    项目介绍: Android上最让人头疼的莫过于从网络获取图片.显示.回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你.Universal Image Loader for Android的目的是为了实现异步的网络图片加载.缓存及显示,支持多线程异步加载.它最初来源于Fedor Vlasov的项目,且自此之后,经过大规模的重构和改进. 特性列举: 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 支持随意的配置ImageLoader,例如

  • SimpleCommand框架ImageLoader API详解(三)

    ImageLoader API 详细介绍,具体内容如下 在ImageLoader中有以下几个不同的构造器: /** * 注意: 次构造器不支持下载进度提示功能 * @param context * @param withCache 是否支持缓存 * false--不带缓存 * true--支持缓存功能,默认缓存路径在外置存储缓冲目录中的picasso-big-cache文件夹中 */ public ImageLoader(Context context, boolean withCache) {

  • Android ListView实现ImageLoader图片加载的方法

    本文实例讲述了Android ListView实现ImageLoader图片加载的方法.分享给大家供大家参考,具体如下: 最近一直忙着做项目,今天也是忙里偷闲,想写篇博客来巩固下之前在应用中所用的知识.之前我们可能会也会肯定遇到了图片的异步加载问题,然而我们也可能会遇到图片二次或多次加载,这是ListView的特性造成的,具体原因不在这里讨论,又或者是OOM等问题.今天要讲的是一个开源框架Imageloader,个人觉得非常的好用. 该框架在github的地址.https://github.co

  • Android ListView 实现上拉加载的示例代码

    本文介绍了Android ListView 实现上拉加载的示例代码,分享给大家,具体如下: 我们先分析一下如何实现 ListView 上拉加载. 当我们上拉的时候,会出现一个提示界面,即 ListView 的 Footer 布局. ListView 要实现滚动,所以要监听 ListView 滚动事件,即 OnScrollListener() 事件. 当我们开始滚动时,Footer 布局才慢慢显示出来,所以需要监听 ListView 的 onTouch() 事件. 实现思路 首先判断 ListVi

  • Android ListView实现上拉加载更多和下拉刷新功能

    本文实例为大家介绍了Android ListView下拉刷新功能的实现方法和功能,供大家参考,具体内容如下 1.ListView优化方式 界面缓存:ViewHolder+convertView 分页加载:上拉刷新 图片缓存 快速滑动ListView禁止刷新 2.效果 3.上拉加载更多原理及实现 当我们手指滑动到listview最后位置的时候,我们触发加载数据的方法.这触发之前我们需要做一些工作,包括: 如何判断滑动到最后? 如何避免重复加载数据? 加载之后如何刷新界面? 1).界面实现AbsLi

  • webpack css加载和图片加载的方法示例

    css加载器 在webpack中,所有的资源(js文件.css文件.模板文件,图片文件等等)都被看成是一个模块,因此多有的资源都是可以被加载的. 加载这些资源我们要在module属性定义这些加载配置(指定加载器). 在module属性中,通过定义loaders定义加载器,其属性值是一个数组,每一个成员代表一个配置. 通过test定义匹配的规则(正则表达式) 通过loader定义加载器,可以通过!级联多个加载器 加载css是要两个加载器,一个是style-loader,一个是css-loader样

  • Android ListView实现下拉加载功能

    本文实例为大家分享了ListView下拉加载展示的具体代码,供大家参考,具体内容如下 1.MyListView.Java public class MyListView extends ListView implements OnScrollListener { private final static int RELEASE_To_REFRESH = 0;// 下拉过程的状态值 private final static int PULL_To_REFRESH = 1; // 从下拉返回到不刷新

  • Android ListView实现上拉加载下拉刷新和滑动删除功能

    最近项目需要用到可以滑动删除并且带有上拉加载下拉刷新的Listview,查阅了一些资料,大多都是在SwipeMenuListView的基础上去添加头部和底部View,来扩展上拉加载和下拉刷新的功能,不过需要手动的去绘制UI及处理一些动画效果.用起来也不是特别方便.刚好项目中用到PulltorefreshLibrary库,就尝试着扩展了一个PullToRefreshSwipeMenuListView类来实现需求.先看一下效果: 实现步骤 一.组合Pulltorefresh与SwipeMenuLis

  • 分享一个轻量级图片加载类 ImageLoader

    ImageLoader 这类的 图片加载网络上一大推,像比较出名的有nostra13 的-Image-Loader图片加载,xUtil的图片加载,还有 Facebook 的 Fresco .很多,但本着求学的态度,最近在做项目时有图片加载这个需求就自己写了个轻量级的 (本地)图片缓存加载 功能,分享给各位. 里面涉及了 LruCache ,ExecutorService,处理大图的 BitmapFactory 原理,view.setTag() . 好了,不多说,先一步一步来: 首先看一下我封装的

  • vue中图片加载不出来的问题及解决

    目录 一.项目打包完成后,打开整体空白 1.路径问题 原因 解决办法 2.vue-router的history模式打包后界面空白 二.assets目录下图片加载不出来 vue-cli的assets和static的两个文件的区别 原因 解决办法 简化本地图片加载的方法 在使用vue开发项目的时候,经常会遇到的一个问题就是:图片加载不出来.下面是我总结的几种图片加载不出来的情况及解决办法. 一.项目打包完成后,打开整体空白 1.路径问题 原因 在vue+webpack的项目中,项目打包之后的css和

  • Android程序开发ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)

    例子中用于解析Json的Gson请自己Google下载 主Activity: package COM.Example.Main; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import COM.Example.Main.R; import COM.Example.Main.stringG

  • Android编程图片加载类ImageLoader定义与用法实例分析

    本文实例讲述了Android编程图片加载类ImageLoader定义与用法.分享给大家供大家参考,具体如下: 解析: 1)图片加载使用单例模式,避免多次调用时产生死锁 2)核心对象 LruCache 图片加载时先判断缓存里是否有图片,如果有,就使用缓存里的 没有就加载网络的,然后置入缓存 3)使用了线程池ExecutorService mThreadPool技术 4)使用了Semaphore 信号来控制变量按照先后顺序执行,避免空指针的问题 如何使用: 在Adapter里加载图片时 复制代码 代

随机推荐