ImageLoader使用

第一步: 初始化的配置

  实现自定义的MyApplication类,并初始化ImageLoader

public class MyApplication extends Application {
   @Override
   public void onCreate() {
       super.onCreate();
         ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
               .threadPriority(Thread.NORM_PRIORITY - 2)
               .denyCacheImageMultipleSizesInMemory()
               .discCacheFileNameGenerator(new Md5FileNameGenerator())
               .tasksProcessingOrder(QueueProcessingType.LIFO)
               .enableLogging() // Not necessary in common
               .build();
       // //全局初始化 ,默认的配置 ,也可以使用默认的配置
      //  ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
       ImageLoader.getInstance().init(config);    //  1 . 初始化配置信息

    }
}

第二步 : 设置图片的显示类型 DisplayImageOptions

    在要显示图片的时候设置

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

第三步 : 使用

      /**
             * 显示图片
             * 参数1:图片url
             * 参数2:显示图片的控件
             * 参数3:显示图片的设置
             *
             */
    // 第一种:
 ImageLoader.getInstance().displayImage(url, holder.image, options);  

    //第二种 四个参数
            /**
             *
             * 参数1:图片url
             * 参数2:显示图片的控件
             * 参数3:显示图片的设置
             * 参数4:监听器
             */
        ImageLoader.getInstance().displayImage(images[position], imageView, options, new SimpleImageLoadingListener() {
                @Override
                public void onLoadingStarted(String imageUri, View view) {  // 加载时候
                    spinner.setVisibility(View.VISIBLE);  //显示进度条
                }
                @Override
                public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                    String message = null;
                    switch (failReason.getType()) {     // 获取图片失败类型
                        case IO_ERROR:              // 文件I/O错误
                            message = "Input/Output error";
                            break;
                        case DECODING_ERROR:        // 解码错误
                            message = "Image can‘t be decoded";
                            break;
                        case NETWORK_DENIED:        // 网络延迟
                            message = "Downloads are denied";
                            break;
                        case OUT_OF_MEMORY:         // 内存不足
                            message = "Out Of Memory error";
                            break;
                        case UNKNOWN:               // 原因不明
                            message = "Unknown error";
                            break;
                    }
                    Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show();  

                    spinner.setVisibility(View.GONE);
                }  

                @Override
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {  //
                    spinner.setVisibility(View.GONE);       // 不显示圆形进度条
                }
            });  

其他的一些配置 :设置滑动时候不加载图片

  // 设置滑动不加载 pauseOnScroll(滑动不加载) 传 true     pauseOnScroll(猛划不加载) 传true
     listView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), pauseOnScroll, pauseOnScroll));
     gridView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), pauseOnScroll, pauseOnFling));

OutOfMemoryError 解决方法

  减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5
  在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888,使用RGB_565会比使用ARGB_8888少消耗2倍的内存
  在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存
  在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)

本地图片的使用 , 转换成url

  //图片来源于Content provider
  String contentprividerUrl = "content://media/external/audio/albumart/13";
  //图片来源于assets
  String assetsUrl = Scheme.ASSETS.wrap("image.png");
  //图片来源于
  String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image"); 

附录 :
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

时间: 2024-12-12 20:28:39

ImageLoader使用的相关文章

Android开源框架ImageLoader:加载图片的三级缓存机制

前言:可从  https://github.com/nostra13/Android-Universal-Image-Loader 下载三级缓存机制的开源框架.下文简单介绍该框架中主要的常用方法,掌握这些方法,基本就可应对多数图片下载的需求. 注意:以下代码为示意代码片断,仔细读一下应能知道怎么用.蓝色表示为开源框架中的类. 1.初始化ImageLoader类对象: ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.

Android 网络图片加载缓存处理库ImageLoader和Picasso

在Android图片处理中需要考虑的问题很多,例如OOM.图片缓存和网络图片加载.多线程问题及图片压缩处理等等复杂的问题.网上也有一些很优秀的开源库帮我们处理这些问题,下面介绍两款开源图片处理库框架:Universal-ImageLoader和Picasso. Universal-ImageLoader: 优点: 支持本地图片和网络图片的多线程异步加载和缓存处理: 个性化的配置自己项目的ImageLoader: 图片加载过程的监听回调: 自动对加载的图片针对当前剩余内存进行裁剪优化,防止OOM:

Android图片缓存的框架ImageLoader的使用

DisplayImageOptions options;        // DisplayImageOptions是用于设置图片显示的类 // 使用DisplayImageOptions.Builder()创建DisplayImageOptions  options = new DisplayImageOptions.Builder()  .showStubImage(R.drawable.ic_stub)          // 设置图片下载期间显示的图片  .showImageForEmp

Android开源项目 Universal imageloader 源码研究之项目框架

Universal imageloader 的代码并不复杂 重点是缓存,线程池任务 下面都用UML图进行了绘制 基本使用流程就是 初始化配置,设置Options参数,最后Dispaly提交下载 public static void initImageLoader(Context context) { ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context); config.thr

ImageLoader配置(注释)

/** * 配置ImageLoader */ private void configImageLoader() { File discCacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "/iWorker/Cache/images"); int memClass = ((android.app.ActivityManager) getSystemService(Context.ACTIVITY_SE

Android -- ImageLoader本地缓存

传送门 <Android -- ImageLoader简析>  http://www.cnblogs.com/yydcdut/p/4008097.html 本地缓存 在缓存文件时对文件名称的修改提供了两种方式,每一种方式对应了一个Java类 1)  HashCodeFileNameGenerator,该类负责获取文件名称的hashcode然后转换成字符串. 2)  Md5FileNameGenerator,该类把源文件的名称同过md5加密后保存. 两个类都继承了FileNameGenerato

ImageLoader在Listview中的使用

图片加载框架之ImageLoader 1_特点 1)多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 2)支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置 3)支持图片的内存缓存,文件系统缓存或者SD卡缓存 4)支持图片下载过程的监听 5)根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存 6)较好的控制图片的加载过程,例如暂停图片加载,重

【框架】异步加载大量图片--ImageLoader

public abstract class BaseImageLoaderProvider { public abstract void loadImage(Context ctx, ImageLoader img); } public class GlideImageLoaderCorpProvider extends BaseImageLoaderProvider { @Override public void loadImage(Context ctx, ImageLoader img)

胖虎谈ImageLoader框架(四)

前言 从学校出来的这半年时间,发现很少有时间可以静下来学习和写博文了,为了保持着学习热情,我希望自己抽出一部分时间来写一些Android框架源码阅读后的理解系列博文. 期许:希望可以和大家一起学习好此框架,也希望大家看博文前最好是先了解下框架的基本使用场景和使用方法,有什么问题可以留言给我,交流学习. 当然,再好的博文,也不如自己看一遍源码! 这次为大家带来的是<胖虎谈ImageLoader框架>系列,分析优秀的框架源码能让我们更迅速地提升,大家共勉!! 源码包下载地址:http://down

【光速使用开源框架系列】图片加载框架ImageLoader

[关于本系列] 最近看了不少开源框架,网上的资料也非常多,但是我认为了解一个框架最好的方法就是实际使用.本系列博文就是带领大家快速的上手一些常用的开源框架,体会到其作用. 由于作者水平有限,本系列只会描述如何快速的使用框架的基本功能,更多的详细设置大家可以在这些项目的页面上找到. [介绍]: ImageLoader作为一款开源的异步图片加载框架,在Android开发中经常被使用到,该控件可以加载和显示图片.并且对其进行缓存,提供了很多方便的选项帮助开发者们快速达到开发需求. [GitHub页面]