DisplayImageOptions的详细配置与简单的图片加载

来源:互联网 发布:oracle数据库简介 编辑:程序博客网 时间:2024/04/28 12:45

  在使用这个框架的时候,我们必须要配置一个DisplayImageOptions对象来作为ImageLoader.getInstance().displayImage()中的参数,所以很有必要讲解这个对象的配制方法。讲解完了后其实这个框架我们就会了解的比较详尽了。

1.默认的配置

复制代码
DisplayImageOptions options = new DisplayImageOptions.Builder()    .showImageOnLoading(R.drawable.ic_stub) // resource or drawable    .showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable    .showImageOnFail(R.drawable.ic_error) // resource or drawable    .resetViewBeforeLoading(false)  // default    .delayBeforeLoading(1000)    .cacheInMemory(false) // default    .cacheOnDisk(false) // default    .preProcessor(...)    .postProcessor(...)    .extraForDownloader(...)    .considerExifParams(false) // default    .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default    .bitmapConfig(Bitmap.Config.ARGB_8888) // default    .decodingOptions(...)    .displayer(new SimpleBitmapDisplayer()) // default    .handler(new Handler()) // default    .build();
复制代码

 

example:

复制代码
    /**     * 显示图片的所有配置     * @return     */    private DisplayImageOptions getWholeOptions() {        DisplayImageOptions options = new DisplayImageOptions.Builder()          .showImageOnLoading(R.drawable.loading) //设置图片在下载期间显示的图片          .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片          .showImageOnFail(R.drawable.error)  //设置图片加载/解码过程中错误时候显示的图片        .cacheInMemory(true)//设置下载的图片是否缓存在内存中          .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中          .considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示          .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型        //.decodingOptions(BitmapFactory.Options decodingOptions)//设置图片的解码配置          .delayBeforeLoading(0)//int delayInMillis为你设置的下载前的延迟时间        //设置图片加入缓存前,对bitmap进行设置          //.preProcessor(BitmapProcessor preProcessor)          .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位          .displayer(new RoundedBitmapDisplayer(20))//不推荐用!!!!是否设置为圆角,弧度为多少          .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间,可能会出现闪动        .build();//构建完成                return options;    }
复制代码

 

2.一般常用的配置

复制代码
        /**     * 设置常用的设置项     * @return     */    private DisplayImageOptions getSimpleOptions() {        DisplayImageOptions options = new DisplayImageOptions.Builder()          .showImageOnLoading(R.drawable.loading) //设置图片在下载期间显示的图片          .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片          .showImageOnFail(R.drawable.error)  //设置图片加载/解码过程中错误时候显示的图片        .cacheInMemory(true)//设置下载的图片是否缓存在内存中          .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中          .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示          .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型        .build();//构建完成        return options;    }
复制代码

 

注意:这里面的参数当然也是可以随意修改的,根据项目需要再定!

 

几点说明:

1).imageScaleType(ImageScaleType imageScaleType)  //设置图片的缩放方式,如:

.imageScaleType(ImageScaleType.IN_SAMPLE_INT)

其中,mageScaleType的选择值:
              EXACTLY :图像将完全按比例缩小的目标大小
              EXACTLY_STRETCHED:图片会缩放到目标大小完全
              IN_SAMPLE_INT:图像将被二次采样的整数倍
              IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
              NONE:图片不会调整

2).displayer(BitmapDisplayer displayer)  // 设置图片的显示方式,如:

.displayer(new FadeInBitmapDisplayer(100))

其中,displayer的选择值:

     RoundedBitmapDisplayer(int roundPixels)设置圆角图片,不推荐!!!
              FakeBitmapDisplayer()这个类什么都没做
              FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
     SimpleBitmapDisplayer()正常显示一张图片

 

3.避免OOM

.bitmapConfig(Bitmap.Config.RGB_565) //默认是ARGB_8888,使用RGB_565会比使用ARGB_8888少消耗2倍的内

使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT) imageScaleType(ImageScaleType.EXACTLY)

避免使用.displayer(new RoundedBitmapDisplayer(20))//他会创建新的ARGB_8888格式的Bitmap对象;

 

4.实现简单的图片加载

通过了上面的配置我们就可以实现图片的加载了,这里以一个网络图片进行举例:

1.最简单的加载

ImageLoader.getInstance().displayImage(imageUrl, imageView); // imageUrl代表图片的URL地址,imageView代表承载图片的IMAGEVIEW控件  

 

2.有加载项的加载

复制代码
//显示图片的配置        DisplayImageOptions options = new DisplayImageOptions.Builder()                .showImageOnLoading(R.drawable.ic_stub)                .showImageOnFail(R.drawable.ic_error)                .cacheInMemory(true)                .cacheOnDisk(true)                .bitmapConfig(Bitmap.Config.RGB_565)                .build();                final ImageView mImageView = (ImageView) findViewById(R.id.image);        String imageUrl = "http://img.my.csdn.net/uploads/201309/01/1378037235_7476.jpg";                imageLoader.displayImage(imageUrl, mImageView, options);
复制代码

 

 

 

3.加载时进行监听

public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,ImageLoadingListener listener) {}//  ImageLoadingListener 用于监听图片的下载情况。

 

复制代码
imageLoader.displayImage(imageUrl, imageView, options, new ImageLoadingListener() {      @Override      public void onLoadingStarted() {         //开始加载的时候执行      }      @Override      public void onLoadingFailed(FailReason failReason) {               //加载失败的时候执行      }       @Override       public void onLoadingComplete(Bitmap loadedImage) {         //加载成功的时候执行      }       @Override       public void onLoadingCancelled() {         //加载取消的时候执行        }});  
复制代码

 

4.监听加载进度

public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,                    ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {}

 

复制代码
imageLoader.displayImage(imageUrl, imageView, options, new ImageLoadingListener() {      @Override      public void onLoadingStarted() {         //开始加载的时候执行      }      @Override      public void onLoadingFailed(FailReason failReason) {               //加载失败的时候执行      }          @Override          public void onLoadingComplete(Bitmap loadedImage) {         //加载成功的时候执行      }          @Override          public void onLoadingCancelled() {         //加载取消的时候执行      },new ImageLoadingProgressListener() {              @Override        public void onProgressUpdate(String imageUri, View view, int current,int total) {           //在这里更新 ProgressBar的进度信息        }      });  
复制代码

 

复制代码
  ImageLoader.getInstance().displayImage(imageUrl, mImageView, getSimpleOptions(), new SimpleImageLoadingListener(), new ImageLoadingProgressListener() {            @Override            public void onProgressUpdate(String imageUri, View view,                    int current, int total) {                double progress = ((double)current/total)*100;                System.out.println(progress+"%");                progressTv.setText("当前进度是:" + progress+"%");            }                });
复制代码

 

5.转换到Bitmap中

// Load image, decode it to Bitmap and return Bitmap synchronouslyBitmap bmp = imageLoader.loadImageSync(imageUri);

 

6.设置图片大小

复制代码
// Load image, decode it to Bitmap and return Bitmap to callbackImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this sizeimageLoader.loadImage(imageUri, targetSize, options, new SimpleImageLoadingListener() {    @Override    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {        // Do whatever you want with Bitmap    }});
复制代码

 

7.加载其他来源的图片

复制代码
String imageUri = "http://site.com/image.png"; // from WebString imageUri = "file:///mnt/sdcard/image.png"; // from SD cardString imageUri = "content://media/external/audio/albumart/1"; // from content providerString imageUri = "assets://image.png"; // from assetsString imageUri = "drawable://" + R.drawable.img; // from drawables (non-9patch images)
复制代码

ps:当你真的需要用drawable://+……这种形式的时候再用这种形式,否则请考虑传统的方式ImageView.setImageResource(...)来设置图片!!!!

others:

复制代码
    //图片来源于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");
复制代码

 

Activity代码:

复制代码
package com.kale.universalimageloadertest;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;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.FailReason;import com.nostra13.universalimageloader.core.assist.ImageScaleType;import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener;import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                final TextView progressTv = (TextView)findViewById(R.id.progress_textView);                final ImageView mImageView = (ImageView) findViewById(R.id.image);                  //图片来自于SD卡        //String imagePath = "/mnt/sdcard/image.png";         /// String imageUrl = Scheme.FILE.wrap(imagePath);                  //图片来自于网络        String imageUrl = "http://static4.photo.sina.com.cn/middle/69670edbx9475f3f01283&690";                                ImageLoader.getInstance().displayImage(imageUrl, mImageView, getSimpleOptions(), new SimpleImageLoadingListener(), new ImageLoadingProgressListener() {            @Override            public void onProgressUpdate(String imageUri, View view,                    int current, int total) {                double progress = ((double)current/total)*100;                System.out.println(progress+"%");                progressTv.setText("当前进度是:" + progress+"%");            }                });        //清除缓存        ImageLoader.getInstance().clearDiskCache();        ImageLoader.getInstance().clearMemoryCache();    }        /**     * 设置常用的设置项     * @return     */    private DisplayImageOptions getSimpleOptions() {        DisplayImageOptions options = new DisplayImageOptions.Builder()          .showImageOnLoading(R.drawable.loading) //设置图片在下载期间显示的图片          .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片          .showImageOnFail(R.drawable.error)  //设置图片加载/解码过程中错误时候显示的图片        .cacheInMemory(true)//设置下载的图片是否缓存在内存中          .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中          .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示          .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型        .build();//构建完成        return options;    }        /**     * 显示图片的所有配置     * @return     */    private DisplayImageOptions getWholeOptions() {        DisplayImageOptions options = new DisplayImageOptions.Builder()          .showImageOnLoading(R.drawable.loading) //设置图片在下载期间显示的图片          .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片          .showImageOnFail(R.drawable.error)  //设置图片加载/解码过程中错误时候显示的图片        .cacheInMemory(true)//设置下载的图片是否缓存在内存中          .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中          .considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示          .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型        //.decodingOptions(BitmapFactory.Options decodingOptions)//设置图片的解码配置          .delayBeforeLoading(0)//int delayInMillis为你设置的下载前的延迟时间        //设置图片加入缓存前,对bitmap进行设置          //.preProcessor(BitmapProcessor preProcessor)          .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位          .displayer(new RoundedBitmapDisplayer(20))//不推荐用!!!!是否设置为圆角,弧度为多少          .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间,可能会出现闪动        .build();//构建完成                return options;    }            /*    DisplayImageOptions options = new DisplayImageOptions.Builder()    .showImageOnLoading(R.drawable.ic_stub) // resource or drawable    .showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable    .showImageOnFail(R.drawable.ic_error) // resource or drawable    .resetViewBeforeLoading(false)  // default    .delayBeforeLoading(1000)    .cacheInMemory(false) // default    .cacheOnDisk(false) // default    .preProcessor(...)    .postProcessor(...)    .extraForDownloader(...)    .considerExifParams(false) // default    .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default    .bitmapConfig(Bitmap.Config.ARGB_8888) // default    .decodingOptions(...)    .displayer(new SimpleBitmapDisplayer()) // default    .handler(new Handler()) // default    .build();*/}
复制代码

 

 

参考自:

http://blog.csdn.net/xiaanming/article/details/26810303

http://blog.csdn.net/vipzjyno1/article/details/23206387

0 0