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

  在使用这个框架的时候,我们必须要配置一个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 = "https://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 synchronously
Bitmap bmp = imageLoader.loadImageSync(imageUri);

 

6.设置图片大小

复制代码
// Load image, decode it to Bitmap and return Bitmap to callback
ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
imageLoader.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 Web
String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
String imageUri = "content://media/external/audio/albumart/1"; // from content provider
String imageUri = "assets://image.png"; // from assets
String 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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,根据您提供的引用内容,我无法直接回答关于ImageSessionContext的问题。但是,我可以为您提供一些关于ImageLoader和证书验证的信息。 ImageLoader是一个用于加载和显示图像的库,它可以从网络、文件系统或其他来源加载图像。在使用ImageLoader加载网络图片时,有时会遇到证书验证问题,这可能是由于证书过期、证书不受信任或证书链中的问题等原因导致的。 为了解决这个问题,可以使用ImageSessionContext类来自定义证书验证。ImageSessionContext是一个用于管理SSL/TLS会话的类,它可以用于设置SSL/TLS参数、证书验证和其他相关设置。通过使用ImageSessionContext,您可以自定义证书验证逻辑,以便在加载网络图片时进行证书验证。 以下是一个使用ImageSessionContext进行证书验证的示例代码: ```java // 创建一个SSLContext对象 SSLContext sslContext = SSLContext.getInstance("TLS"); // 创建一个X509TrustManager对象,用于证书验证 X509TrustManager trustManager = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { // 客户端证书验证 } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { // 服务器证书验证 try { // 验证证书链 TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init((KeyStore) null); for (TrustManager tm : tmf.getTrustManagers()) { ((X509TrustManager) tm).checkServerTrusted(chain, authType); } } catch (Exception e) { throw new CertificateException(e); } } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }; // 初始化SSLContext对象 sslContext.init(null, new TrustManager[]{trustManager}, null); // 创建一个ImageSessionContext对象 ImageSessionContext sessionContext = new ImageSessionContext.Builder() .setSslSocketFactory(sslContext.getSocketFactory()) .build(); // 使用ImageLoader加载图片,并设置ImageSessionContext ImageLoader.getInstance().loadImage(url, new ImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { // 图片加载完成 } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { // 图片加载失败 } @Override public void onLoadingStarted(String imageUri, View view) { // 图片开始加载 } @Override public void onLoadingCancelled(String imageUri, View view) { // 图片加载取消 } }, new DisplayImageOptions.Builder() .extraForDownloader(sessionContext) .build()); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值