文档章节

Android-Universal-Image-Loader开源项目的简要说明及使用实例

MT牛牛
 MT牛牛
发布于 2014/09/16 16:10
字数 1549
阅读 117
收藏 0

ImageLoaderConfiguration

1.作用:为ImageLoader提供下载配置

2.构造方法:

复制代码

/**
     * ImageLoaderConfiguration 创建的两种方式。     */
    // 创建默认的ImageLoaderConfiguration
    ImageLoaderConfiguration configuration_0 = ImageLoaderConfiguration
            .createDefault(this);    // 使用DisplayImageOptions.Builder()创建DisplayImageOptions
    ImageLoaderConfiguration configuration_1 = new ImageLoaderConfiguration.Builder(            this).threadPriority(Thread.NORM_PRIORITY - 2)
            .denyCacheImageMultipleSizesInMemory()
            .discCacheFileNameGenerator(new Md5FileNameGenerator())
            .tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging()
            .build();

复制代码

3.常用方法:

 

/**
 *当同一个Uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片 */ denyCacheImageMultipleSizesInMemory()

复制代码

/**
     * 设置本地图片缓存
     * @param discCache     */
    discCache(DiscCacheAware discCache)

    DiscCacheAware 类型(在com.nostra13.universalimageloader.cache.disc.impl包下能找到如下的类):
        FileCountLimitedDiscCache(File cacheDir, int maxFileCount):设置缓存路径和缓存文件的数量,超过数量后,old将被删除
        FileCountLimitedDiscCache(File cacheDir,FileNameGenerator fileNameGenerator,int maxFileCount):第二个参数是通过图片的url生成的唯一文件名。
        LimitedAgeDiscCache(File cacheDir, FileNameGenerator fileNameGenerator, long maxAge) :第二个参数同上
        LimitedAgeDiscCache(File cacheDir, long maxAge):maxAge为定义的时间,超过时间后,图片将被删除
        TotalSizeLimitedDiscCache(File cacheDir, FileNameGenerator fileNameGenerator, int maxCacheSize) :第二个参数同上   
        TotalSizeLimitedDiscCache(File cacheDir, int maxCacheSize) :定义缓存的大小,如超过了,就会删除old图片。
        UnlimitedDiscCache(File cacheDir) :缓存没有限制
        UnlimitedDiscCache(File cacheDir, FileNameGenerator fileNameGenerator):第二个参数同上

复制代码

复制代码

/**
     * 设置图片保存到本地的参数
     * @param maxImageWidthForDiscCache 保存的最大宽度
     * @param maxImageHeightForDiscCache 保存的最大高度
     * @param compressFormat    保存的压缩格式
     * @param compressQuality 提示压缩的程度,有0-100.想png这种图片无损耗,就不必设置了     */
    discCacheExtraOptions(int maxImageWidthForDiscCache,            int maxImageHeightForDiscCache,
            android.graphics.Bitmap.CompressFormat compressFormat,            int compressQuality)

复制代码

/**
     * 设置缓存文件的数量
    * @param maxFileCount 数量     */
    discCacheFileCount(int maxFileCount)

/**
       * 设置缓存的大小
       * @param maxCacheSize 大小      */
        discCacheSize(int maxCacheSize)

复制代码

/**
     * 设置缓存文件的名字
     * @param fileNameGenerator     */
    discCacheFileNameGenerator(FileNameGenerator fileNameGenerator)
             fileNameGenerator:
                      HashCodeFileNameGenerator() :通过HashCode将url生成文件的唯一名字
                      Md5FileNameGenerator():通过Md5将url生产文件的唯一名字

复制代码

/**
  * 启动Log信息记录,用于查看异常信息  */
    enableLogging()

/**
     * 设置缓存信息
     * @param maxImageWidthForMemoryCache 缓存图片的最大宽度,默认为手机的屏幕宽度
     * @param maxImageHeightForMemoryCache 缓存图片的最大高度,默认为手机的屏幕宽度     */
    memoryCacheExtraOptions(int maxImageWidthForMemoryCache, int maxImageHeightForMemoryCache)

复制代码

/**
     * 添加个线程池,进行下载
     * @param executor 线程池
     * 如果进行了这个设置,那么threadPoolSize(int),threadPriority(int),tasksProcessingOrder(QueueProcessingType)
     * 将不会起作用     */
     taskExecutor(Executor executor)

复制代码

/**
       * 设置用于显示图片的线程池大小
      * @param threadPoolSize       */
      threadPoolSize(int threadPoolSize)

/**
      * 设置线程的优先级
      * @param threadPriority       */
      threadPriority(int threadPriority)

/**
      * 设置图片下载和显示的工作队列排序
       * @param tasksProcessingType       */
      tasksProcessingOrder(QueueProcessingType tasksProcessingType)

/**
      * 下载缓存图片
    * @param executorForCachedImages    */
     taskExecutorForCachedImages(Executor executorForCachedImages)

 

DisplayImageOptions

1.作用:用于设置图片显示的类。

2.构造方法:

复制代码

/**
         * DisplayImageOptions 创建的两种方式。         */
        // 创建默认的DisplayImageOptions
        DisplayImageOptions option_0 = DisplayImageOptions.createSimple();        // 使用DisplayImageOptions.Builder()创建DisplayImageOptions
        DisplayImageOptions option_1 = new DisplayImageOptions.Builder()
                .showStubImage(R.drawable.ic_launcher)
                .showImageOnFail(R.drawable.ic_error)
                .showImageForEmptyUri(R.drawable.ic_empty).cacheInMemory()
                .cacheOnDisc().displayer(new RoundedBitmapDisplayer(20))
                .build();

复制代码

3.常用方法:

复制代码

//设置图片在下载期间显示的图片    showStubImage(R.drawable.ic_launcher)    
    //设置图片Uri为空或是错误的时候显示的图片    showImageForEmptyUri(R.drawable.ic_empty)    
    //设置图片加载/解码过程中错误时候显示的图片    showImageOnFail(R.drawable.ic_error)    
    //设置图片在下载前是否重置,复位    resetViewBeforeLoading()    
    //设置下载的图片是否缓存在内存中    cacheInMemory()    
    //设置下载的图片是否缓存在SD卡中    cacheOnDisc()    
    //设置图片的解码类型    bitmapConfig(Bitmap.Config.RGB_565)    
    //设置图片的解码配置    decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)    
    //设置图片下载前的延迟
    delayBeforeLoading(int delayInMillis) 
    
    //设置额外的内容给ImageDownloader    extraForDownloader(Object extra)    
    //设置图片加入缓存前,对bitmap进行设置    preProcessor(BitmapProcessor preProcessor)    
    //设置显示前的图片,显示后这个图片一直保留在缓存中    postProcessor(BitmapProcessor postProcessor) 
    
    //设置图片以如何的编码方式显示
    imageScaleType(ImageScaleType imageScaleType)

复制代码

复制代码

/**
     * 设置图片的显示方式
     * @param displayer 
     */
    displayer(BitmapDisplayer displayer)
        displayer:
              RoundedBitmapDisplayer(int roundPixels)设置圆角图片
              FakeBitmapDisplayer()这个类什么都没做
              FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
       SimpleBitmapDisplayer()正常显示一张图片

复制代码

复制代码

/**
 * 图片的缩放方式
 * @param imageScaleType */
    imageScaleType(ImageScaleType imageScaleType)
         imageScaleType:
                 EXACTLY :图像将完全按比例缩小的目标大小
                   EXACTLY_STRETCHED:图片会缩放到目标大小完全
                   IN_SAMPLE_INT:图像将被二次采样的整数倍
                   IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
                   NONE:图片不会调整

复制代码

 

二.简要使用的示例

MyApplication

复制代码

package com.ryantang.rtimageloader;import android.app.Application;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;/**
 * 初始化ImageLoaderConfiguration
 * 
 * @author hsx
 * @time 2013-12-5下午05:38:43 */public class MyApplication extends Application {
    @Override    public void onCreate() {        super.onCreate();        
        // This configuration tuning is custom. You can tune every option, you may tune some of them, 
        // or you can create default configuration by        //  ImageLoaderConfiguration.createDefault(this);        // method.
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
                .threadPriority(Thread.NORM_PRIORITY - 2)//设置线程的优先级
                .denyCacheImageMultipleSizesInMemory()//当同一个Uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片
                .discCacheFileNameGenerator(new Md5FileNameGenerator())//设置缓存文件的名字
                .discCacheFileCount(60)//缓存文件的最大个数
                .tasksProcessingOrder(QueueProcessingType.LIFO)// 设置图片下载和显示的工作队列排序
                .enableLogging() //是否打印日志用于检查错误                .build();        
        //Initialize ImageLoader with configuration        ImageLoader.getInstance().init(config);
    }
}

复制代码

AnimateFirstDisplayListener

复制代码

package com.ryantang.rtimageloader.listener;import java.util.Collections;import java.util.LinkedList;import java.util.List;import android.graphics.Bitmap;import android.view.View;import android.widget.ImageView;import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener;import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;public class AnimateFirstDisplayListener extends SimpleImageLoadingListener {    public static  List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());

    @Override    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {        if (loadedImage != null) {
            ImageView imageView = (ImageView) view;            boolean firstDisplay = !displayedImages.contains(imageUri);            if (firstDisplay) {
                FadeInBitmapDisplayer.animate(imageView, 500);
                displayedImages.add(imageUri);
            }
        }
    }
}

复制代码

ItemAdapter

复制代码

package com.ryantang.rtimageloader.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;import com.ryantang.rtimageloader.R;import com.ryantang.rtimageloader.listener.AnimateFirstDisplayListener;public class ItemAdapter extends BaseAdapter {
    DisplayImageOptions options;    private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();

    String[] imageUrls;
    Context context;    public ItemAdapter(String[] imageUrls, Context context) {        super();        this.imageUrls = imageUrls;        this.context = context;
        options = new DisplayImageOptions.Builder()
        .showStubImage(R.drawable.ic_launcher)//设置图片在下载期间显示的图片
        .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片
         .showImageOnFail(R.drawable.ic_launcher)//设置图片加载/解码过程中错误时候显示的图片
         .cacheInMemory(true)//是否緩存都內存中
         .cacheOnDisc(true)//是否緩存到sd卡上
         .displayer(new RoundedBitmapDisplayer(20))
                .build();
    }    private class ViewHolder {        public TextView text;        public ImageView image;
    }

    @Override    public int getCount() {        return imageUrls.length;
    }

    @Override    public Object getItem(int position) {        return position;
    }

    @Override    public long getItemId(int position) {        return position;
    }

    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        final ViewHolder holder;        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.item_list_image, parent, false);
            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.text);
            holder.image = (ImageView) convertView.findViewById(R.id.image);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.text.setText("Item " + (position + 1));        // ImageLoader
        ImageLoader imageLoader = ImageLoader.getInstance();
        imageLoader.displayImage(imageUrls[position], holder.image, options, animateFirstListener);        return convertView;
    }
}


本文转载自:http://blog.csdn.net/dai_zhenliang/article/details/37594731

MT牛牛
粉丝 1
博文 19
码字总数 2640
作品 0
石家庄
程序员
私信 提问
github上的NB Android项目

最近想捣鼓捣鼓Android,下了Oschina的android client source,看得挺舒服的,写得很清晰,受益匪浅,想再深入了解下,当然是接着看优秀开源项目咯。google到CSDN上的“直接拿来用,最火的A...

pengzai
2013/05/13
667
0
UltimateAndroid快速开发框架教程

UltimateAndroid是一套集成了许多现有优秀的Android开源类库并将之组合成一个整体的Android快速开发框架。 框架目前主要包含的功能有View Injection,ORM,异步网络请求和图片加载,自动化脚本...

MarshalChen
2014/09/09
2.9K
6
Android性能优化——图片优化(二)

图片的加载和显示是每个商业APP都避免不了的问题,对于图片重度依赖类APP,例如壁纸类应用,图片社交类应用,对于图片的处理将会影响到整个APP的用户体验。 在正式了解Android中如何优化图片...

落地吃鸡
2017/04/21
361
0
Design Patterns in Android:工厂方法模式

前言 今天给大家分享的是《设计模式Android篇:工厂方法模式》。 工厂方法是创建型模式的一种,可用来在适当的场合创建对象。今天将通过Android源码和Android开发案例跟大家讲解什么是工厂方...

MichaelX
2018/10/30
0
0
Android 使用Universal Image Loader绘制带圆角的图片(一)

Android 使用Universal Image Loader绘制带圆角的图片(一) 绘制带圆角的控件难吗?貌似不难。对于一个普通layout或者widget,要绘制圆角,只要把 background设置成下面这样的drawable就行了...

yhchinabest
2015/07/20
4K
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部