使用Universal-Image-Loader加载图片

来源:互联网 发布:墙纸设计软件 编辑:程序博客网 时间:2024/05/20 13:19

在请求图片时,往往会涉及到对图片的二次采样处理,包括图片的大小,显示的样式(圆角,矩形),甚至时缓存处理,相信大家也接触过很多类似的需求,个人感觉Universal-Image-Loader在这方面做的还是比较人性化的,不需要开发者去做过段繁琐的代码操作,简单易用,所以简单封装了一个图片请求的工具类,支持对图片的二次采样大小,以及显示样式,是否启用缓存等操作。

package com.zhuandian.msuic;import android.content.Context;import android.graphics.Bitmap;import android.view.View;import android.widget.ImageView;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.FailReason;import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener;/** * Created by 谢栋  on 2016/12/25. */public class UniversalImageLoader {    /**     * 通过传入的url下载图片并显示在ImageVIew上     *     * @param context   上下文     * @param url       请求图片的url     * @param imageView 要显示图片的ImageView控件     */    public static void getImage(Context context, String url, ImageView imageView) {        //1.简单得到一张未处理的图片,使用默认的ImageLoaderConfiguration//        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));//        ImageLoader.getInstance().displayImage(url,imageView);        //2.使用自定义配置的ImageLoaderConfiguration修改图片的显示样式,启用缓存等...        //设置图片展示的配置,是否qiy启用缓存,图片显示的样式(圆角,方角)        DisplayImageOptions options = new DisplayImageOptions.Builder()                .cacheInMemory(true)  //启用二级缓存 (检测内存中是否有改图片存在)                .cacheOnDisk(true)    //启用磁盘缓存 (检测磁盘中是否有改图片存在)                .displayer(new RoundedBitmapDisplayer(50))   //设置展示的样式                .build();        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context)//                .memoryCacheSize(5*1024*1024)  //设置二级缓存(内存缓存)的指定大小                .memoryCacheSizePercentage(20)   //设置内存缓存占有的百分比                .diskCacheFileCount(80)          //设置允许缓存的图片数量,当大于指定数量时会删除一部分                .diskCacheSize(5 * 1024 * 1024)  //设置磁盘缓存的大小//                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())  //设置图片展示的模式(默认不做任何处理)                .defaultDisplayImageOptions(options)                .build();        ImageLoader.getInstance().init(configuration);   //传入自定义的ImageLoaderConfiguration        ImageLoader.getInstance().displayImage(url, imageView);        ImageLoader.getInstance().displayImage(url, imageView, options, new ImageLoadingListener() {            //            设置监听事件            @Override            public void onLoadingStarted(String imageUri, View view) {            }            @Override            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {            }            @Override            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {            }            @Override            public void onLoadingCancelled(String imageUri, View view) {            }        }, new ImageLoadingProgressListener() {            //监听进度比            @Override            public void onProgressUpdate(String imageUri, View view, int current, int total) {            }        });    }}

       其实Universal-Image-Loader还是比较强大的,主要支持的功能有一下几个方面

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

当然我贴上的代码只是简单的用法之一,大家在实际项目开发中可以根据需求自己来定制相应的功能,其他一些用法跟具体细节还是需要大家自己动手去尝试下

0 0