Universal-Image-Loader解析(二)——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() {@Overridepublic 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() {@Overridepublic 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 providerString contentprividerUrl = "content://media/external/audio/albumart/13";//图片来源于assetsString 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 {@Overrideprotected 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() {@Overridepublic 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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 进阶

React 进阶一、认识 React1、是什么?2、React 特性3、React 第一个实例(HTML 模板)4、React 安装二、React 核心1、JSX2、元素渲染3、组件4、Props5、State6、组件生命周期7、事件处理8、条件渲染9、列表 & Key10、表单11、状态提升12、组…

dropMenu----简单的下拉菜单生成器

HTML <div class"input-group"><span class"input-group-addon" style"width: 100px" >职级&#xff1a;</span><input type"text" class"units form-control" id"jobTitle" value"其…

Holedox Moving

2012-08-11 我的第一个A*算法&#xff1a; 四处看A*算法。。还是有一点没有弄明白就是那个当已经在列表中的时候再次进入的时候怎么去更新。 这道题。。有点难开始的时候不会位压缩&#xff0c;去看了一个别人的代码。所以感谢一下。这位高手。写了一个bfs(),500多ms。 看了A*…

mint mvc文件上传功能——使用篇

为什么80%的码农都做不了架构师&#xff1f;>>> 为了不打击大家的积极性&#xff0c;暂时只着重讲用法&#xff0c;原理方面暂时不讲太多。 配置web.xml 文件上传需要用到servlet3的异步处理功能。需要在web.xml配置文件中加入异步支持声明&#xff08;注释处&am…

TLS 1.2详解

TSL由多个协议组成的两层协议集合&#xff0c;工作与应用层和传输层之间。 TLS协议包含两层协议&#xff1a;记录层协议&#xff08;TLS Record Protocol协议&#xff09;和 握手协议&#xff08;TLS Handshake Protocol协议&#xff09;&#xff0c;底层采用可靠传输协议&…

个人作业2——英语学习APP案例分析

第一部分 调研&#xff0c; 评测 1.下载并使用&#xff0c;描述最简单直观的个人第一次上手体验&#xff1a; 没有各种广告&#xff0c;界面简洁&#xff0c;软件安装包略小于其他翻译软件。就内存的占用而言优于同款热门软件有道词典。 2.必应词典&#xff08;Android客户端&a…

IOS开发UI篇之──自定义加载等待框(MBProgressHUD)

这里介绍一下网友开源的MBProgressHUD类&#xff0c;实现等待框&#xff0c; 一、网上下载 MBProgessHUD 类文件&#xff0c;直接导入到工程即可 二、示例分析 在我的工程中示例如下&#xff1a; 1&#xff09;在ShowImageViewController.h头文件代码如下&#xff1a; #import…

java中跨时区的日期格式转换

2019独角兽企业重金招聘Python工程师标准>>> 先上一段代码 public class DataTransfer {public static void main(String[] args) {String dateStr "Sep 30, 2014 12:00:00 AM";SimpleDateFormat sdf new SimpleDateFormat();sdf.applyPattern("MM…

C语言读取写入CSV文件 [二]进阶篇——写入CSV文件

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 本系列文章目录 [一] 基础篇 [二] 进阶篇——写入CSV [三] 进阶篇——读取CSV 什么是 包裹&#xff08;使用双引号&…

K8S中部署apisix(非ingress)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 不使用pvc的方式在K8S中部署apisix-gateway 简介 因为公司项目准备重构&#xff0c;现在做技术储备&#xff0c;之前公司项…

机器学习理论知识部分--偏差方差平衡(bias-variance tradeoff)

摘要&#xff1a; 1.常见问题 1.1 什么是偏差与方差&#xff1f; 1.2 为什么会产生过拟合&#xff0c;有哪些方法可以预防或克服过拟合&#xff1f; 2.模型选择例子 3.特征选择例子 4.特征工程与数据预处理例子 内容&#xff1a; 1.常见问题 1.1 什么是偏差与方差&#xff1f; …

有手就行3——持续集成环境—maven、tomcat、安装和配置

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 有手就行3——持续集成环境—maven、tomcat、安装 持续集成环境**(5)-Maven****安装和配置** 持续集成环境(6)-Tomcat安装…

.netcore基础知识(一)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 先来说说web服务器 先来一张图 一个典型的进程外托管模型 我们先看kestrel这一部分 我们在它前面放了一个方向代理服务器n…

BZOJ 1791 岛屿(环套树+单调队列DP)

题目实际上是求环套树森林中每个环套树的直径。 对于环套树的直径&#xff0c;可以先找到这个环套树上面的环。然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值。 那么直径一定就是从环上的某个点开始&#xff0c;某个点结束的。 把环拆成链&#xff0c;定义dp[…

什么是SAS

什么是SAS&#xff1f;简单的说&#xff0c;SAS是一种磁盘连接技术。它综合了现有并行SCSI和串行连接技术&#xff08;光纤通道、SSA、IEEE1394及InfiniBand等&#xff09;的优势&#xff0c;以串行通讯为协议基础架构&#xff0c;采用SCSI-3扩展指令集并兼容SATA设备&#xff…

hdu区域赛在线热身赛 暨 第十二场组队赛

题目编号&#xff1a;hdu 4257~4266 (对应比赛题号1001~1010) 这是我们第十二场组队赛&#xff0c;在今天中午进行。 比赛刚开始&#xff0c;依然是由我的队友读题。还没看几题&#xff0c;就发现了好多题judge时长高达20秒&#xff0c;这真的有点给我们心理造成压力。不过&…

powerdesign相关

1.安装程序和汉化放百度云了 2.打印错误处理 http://jingyan.baidu.com/article/c45ad29cd84e4b051753e2c3.html 3.导出sql http://jingyan.baidu.com/article/7082dc1c48960ee40a89bd38.html 4.name和comment同步 http://blog.csdn.net/steveguoshao/article/details/16940347…

Spring系列15:Environment抽象

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 本文内容 Environment抽象的2个重要概念Profile 的使用PropertySource 的使用 Environment抽象的2个重要概念 Environme…

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(上)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 提示&#xff1a;本系列笔记全部存在于 Github&#xff0c; 可以直接在 Github 查看全部笔记 持续部署概述 持续部署是能…

PS图像菜单下计算命令

PS图像菜单下计算命令通过通道的混合模式得到的选区非常精细&#xff0c;从而调色的时候过度非常好。功能十分强大。 下面用计算命令中的"相加"和"减去"模式做实例解析&#xff0c;这里通道混合模式和图层混合模式原理是一样的。 原图&#xff1a; 实例目…