universal-image-loader框架的再次封装使用

深入解析开源项目之Universal-Image-Loader(一)框架篇 ImageLoader是一个优秀的图片加载开源项目,很多童鞋都在自己的项目中用到了。优秀的项目从来都是把简单留给开发者,把复杂封装在框架内部。 阅读详情

对框架的使用。最好进行二次封装。解耦
这篇文章希望通过图片缓存框架希望能发现,对框架再次封装使用的要点。
1.首先创建一个框架工具类,或者帮助类
2.初始化所需要的对象。

    /***
     * 初始化一个正常的ImageLoader
     * @param context
     */
    public static void init (Context context){
        ImageLoaderConfiguration.Builder config =new ImageLoaderConfiguration.Builder(context);
        config.threadPriority(Thread.NORM_PRIORITY - 2);
        config.denyCacheImageMultipleSizesInMemory();
        //md5加密
        config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
        config.diskCacheSize(80 * 1024 * 1024); // 80 MiB
        config.tasksProcessingOrder(QueueProcessingType.LIFO);
        config.writeDebugLogs(); // Remove for release app
        ImageLoader.getInstance().init(config.build());
    }

3.在工具类对象生成时,初始化几种常见的配置,并将配置的方法进行抽取

      /**
         * 标准配置
         */
        private DisplayImageOptions normalOptions;
        /**
         * 圆形配置
         */
        private DisplayImageOptions circleOptions;
        /**
         * 圆角图片配置
         */
        private DisplayImageOptions roundedOptions;


        private BitmapDisplayer simpleBitmapDisplayer;
        private BitmapDisplayer circleBitmapDisplayer;
        private BitmapDisplayer roundedBitmapDisplayer;


    public ImageLoaderHelper() {

        //初始化 全局默认图片

        simpleBitmapDisplayer = new SimpleBitmapDisplayer();
        normalOptions = getOption(simpleBitmapDisplayer);

        circleBitmapDisplayer = new CircleBitmapDisplayer();
        circleOptions = getOption(circleBitmapDisplayer);

        //圆角图片 圆角半径dp
        int cornerRadiusDp = 10;
        //圆角大小通过 dp2px转换 使得 不同分辨率设备上呈现一致显示效果
        roundedBitmapDisplayer = new RoundedBitmapDisplayer(dip2px(MyApplication.getContext(),cornerRadiusDp));
        roundedOptions = getOption( roundedBitmapDisplayer);

    }
    private int dip2px(Context context, float dpValue) {
        final float density = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * density + 0.5f);

    }
  /**
     * 重构 抽取出的通用生成Option方法

     * @param bitmapDisplayer normal 或圆形、圆角 bitmapDisplayer
     *
     * @return
     */
    private DisplayImageOptions getOption( BitmapDisplayer bitmapDisplayer) {
        return new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .considerExifParams(true)
                .displayer(bitmapDisplayer)
                .build();
    }

4.通过不同的方法完成不同的工具类操作

   /**
     * 正常加载一个图片
     */
    public void loadImageView(ImageView iv, String url) {
        ImageLoader.getInstance().displayImage(url, iv, normalOptions);
    }

    /***
     * 圆角加载
     * @param iv
     * @param url
     */
    public void loadCircleImageView(ImageView iv, String url) {
        ImageLoader.getInstance().displayImage(url, iv, circleOptions);
    }

    public void loadRoundedImageView(ImageView iv, String url) {
        ImageLoader.getInstance().displayImage(url, iv, roundedOptions);
    }

这里写一些Universal-image-loader的常用配置:
参考文章:http://blog.youkuaiyun.com/vipzjyno1/article/details/23206387

ImageLoaderConfiguration config = new ImageLoaderConfiguration  
    .Builder(context)  
    .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每个缓存文件的最大长宽  
    .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) // Can slow ImageLoader, use it carefully (Better don't use it)/设置缓存的详细信息,最好不要设置这个  
    .threadPoolSize(3)//线程池内加载的数量  
    .threadPriority(Thread.NORM_PRIORITY - 2)  
    .denyCacheImageMultipleSizesInMemory()  
    .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现  
    .memoryCacheSize(2 * 1024 * 1024)    
    .discCacheSize(50 * 1024 * 1024)    
    .discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密  
    .tasksProcessingOrder(QueueProcessingType.LIFO)  
    .discCacheFileCount(100) //缓存的文件数量  
    .discCache(new UnlimitedDiscCache(cacheDir))//自定义缓存路径  
    .defaultDisplayImageOptions(DisplayImageOptions.createSimple())  
    .imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间  
    .writeDebugLogs() // Remove for release app  
    .build();//开始构建  
    // Initialize ImageLoader with configuration.  

包括几大部分可以自定义,磁盘信息,内存信息,图片信息等。
展示的配置:

DisplayImageOptions options;  
options = new DisplayImageOptions.Builder()  
 .showImageOnLoading(R.drawable.ic_launcher) //设置图片在下载期间显示的图片  
 .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片  
.showImageOnFail(R.drawable.ic_launcher)  //设置图片加载/解码过程中错误时候显示的图片
.cacheInMemory(true)//设置下载的图片是否缓存在内存中  
.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中  
.considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示  
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//  
.decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)//设置图片的解码配置  
//.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
//设置图片加入缓存前,对bitmap进行设置  
//.preProcessor(BitmapProcessor preProcessor)  
.resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位  
.displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少  
.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  
.build();//构建完成  

部分API过时 disc 变成disk.

display 有四种重载方式,可以进一步监听加载进度等。

使用universal-image-loader实现圆形头像教程 在移动应用中,用户头像通常以圆形或圆角形式展示,以符合设计规范和美观要求。这章我们将探索如何在Android平台上实现圆形头像。在Android开发中,图片加载是一个常见的需求,然而这个过程可能会遇到一些问题。例如,直接从网络加载图片到ImageView可能会导致应用界面卡顿,因为网络操作是耗时的。此外,如果图片太大,可能会导致内存溢出(OOM),特别是在处理大量图片的时候。Universal Image Loader库正是为了解决这些问题而产生的。 阅读详情

相关推荐

MicroPython跨平台移植实战:从源码解析到STM32+FreeRTOS部署

本文详细解析了MicroPython的跨平台移植实战,重点介绍了如何将其从源码开始,成功部署到STM32微控制器并运行于FreeRTOS实时操作系统。内容涵盖源码结构解析、编译环境搭建、内存管理协调、FreeRTOS任务集成、数学库(math)启用与优化,以及自定义模块开发等核心步骤,为开发者提供了一套完整的、可操作的嵌入式Python移植方案。

vodka的博客 1014

AndroidVideoCache终极指南:自定义FileNameGenerator解决URL动态参数难题

在移动视频播放应用中,缓存技术是提升用户体验的关键因素。AndroidVideoCache作为一款强大的Android视频缓存库,能够为任何视频播放器提供缓存支持。本文将详细介绍如何通过自定义FileNameGenerator接口,彻底解决URL动态参数导致的缓存重复问题。 ## 什么是FileNameGenerator? FileNameGenerator是AndroidVideoCache

gitblog_00402的博客 821

OpenEvidence DeepConsult深度分析:技术架构、临床应用与行业影响

摘要:医疗AI平台OpenEvidence通过多智能体协作系统重构临床决策流程,解决了医学信息过载难题。其DeepConsult系统严格基于同行评审文献,5-10秒内提供循证决策支持,已覆盖40%美国医生,月咨询量达850万次。该平台采用"免费工具+广告变现"模式,通过调度、检索、摘要等模块化智能体分工,实现从文献分析到临床建议的闭环处理,在USMLE测试中准确率达90%。2025年获7500万美元融资后估值突破10亿美元,成为医疗AI领域的新范式。

AllenLV的博客 2555

Imageloader 使用与二次封装自动缓存

Imageloader这个一直以来都是安卓加载图片的好工具。一个好的安卓项目必然少不了大量 的图片来点缀,显然volley框架是不能胜任这个工作的。Xutils对于图片的形状控制并不好使。 俺来出一个Imageloader二次封装的吧。直接上jar包  点击下载jar包 接下来直接上代码吧: /** * imageLoad工具代码 *

jian_csdn的专栏 1206

uniapp+openlayers集成天地图实战:renderjs通信陷阱与性能优化避坑指南

本文深入探讨了uniapp与openlayers集成天地图时的renderjs通信陷阱与性能优化策略。通过实战案例解析了renderjs的特殊通信机制、地图实例生命周期管理、图层懒加载等关键技巧,帮助开发者避免常见坑点,提升应用流畅度。特别针对多语言切换、热重载偏移等疑难问题提供了解决方案,是uniapp+openlayers开发者的实用避坑指南。

weixin_30872157的博客 362

ArcGIS中根据DEM和地形起伏度进行地貌分类划分

大家好我是GIS蒲公英,数字高程模型(digital elevation model, DEM)经常都被用到专题地图的底图中,下面来我们来交流一下仅选择海拔和地形起伏度两个指标,用DEM来进行地貌类型的自动判别划分

GIS蒲公英的博客 3万+

【com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator】MD5相关

http://baike.baidu.com/link?url=rrnHERLrdiSrBUn_3aCJn-T9MPjSmKKxNYvH7Uj0oox8-dS6QshUoG7uw7l8teFp

horsttnann的专栏 1287

ubuntu20.04搭建QGC4.2编译环境

QGC 4.2ubuntu18.04也可以编译QGC4.2,但是由于GLBC版本较低,无法使用最新版的QTCreator,Ubuntu20.04可以使用最新版QTCreator。

超维空间科技的博客 1万+

Universal-Image-Loader图片加载框架

引言在前面的安卓面试系列–OOM异常(二)中我们已经给大家简单分析了一下Universal-Image-Loader,并且还在文末给大家提供了一个已经封装好的工具类,不知道大家觉得好不好用呢?今天我们就来分析一下安卓中几大主流的图片加载框架的优缺点。Universal-Image-Loader我们先来回顾一下这个图片加载框架,主要是要进行两个配置,一个是图片下载前的配置,还有一个是图片显示配置,我们

Rosso_Wine的博客 832

三维重建/SLAM笔记_最佳学习路线/攻略

本文目的 学习三维重建,需要不少知识,而知识之间又存在不同的依赖关系,为了后来人能少走弯路,也为了对自己的知识框架系统总结,特记录自己的学习路线。 学习心得 关于读书,了解基础知识是一方面,产生疑问也是一方面,为以后知道学习什么留下印象; 一回生,二回熟,看不懂时,大多是因为先验知识不够,没关系,多查多想,总会搞懂的。 学习路线 1.计算机图形学基础(OpenGL基础版)(徐文鹏 清...

惊鸿一博 3291

ROSTCM6+Gephi的网络语义分析详细教程(附案例实战)

ROSTCM6是武汉大学沈阳教授研发编码的国内目前唯一的以辅助人文社会科学研究的大型免费社会计算平台。该软件可以实现微博分析、聊天分析、全网分析、网站分析、浏览分析、分词、词频统计、英文词频统计、流量分析、聚类分析等一系列文本分析。Gephi是一款开源免费跨平台基于JVM的复杂网络分析软件,可用于各种图形和网络的可视化和探索,是最受欢迎的网络可视化软件之一。

m0_64336780的博客 1万+

android Universal-Image-Loader

一、介绍  (一)、概要:         Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是实现可重复使用的异步图像加载、缓存和显示。所以,如果你的程序里需要这个功能的话,使用它,因为已经封装好了一些类和方法。其实,写一个这方面的程序还是比较麻烦的,要考虑多线程,缓存,内存溢出等很多方面。  (二)、功能概要:     多线程图片加载;  ...

bobo的博客 551

GD32F130之USART多机通信

简介 在多机通信中,一个从机应该只接收它需要接收的数据,且只应该在它需要接收数据时才检测串口。而始终接收RX线上的数据对从机来说是一种负担。 多机通信硬件设计 远距离方案:RS485 板级方案: 静默模式 静默模式有什么作用? 答:如果 USART 处于静默模式,所有的接收状态标志位将不会被置位。 如何进入静默模式? 答:软件可以通过将 USART_CMD 寄存器中MMCMD 位置 1 使 USART 进入静默模式。 如何从静默模式中唤醒? 答:有两种方式可选,①检测到总线

luliplus的博客 299

Android图片异步加载框架Android-Universal-Image-Loader

1、加载图片之前,先要做初始化配置,这个类似很多游戏引擎使用前要做一下初始化,其实只做了一件事,实例化一个全局的ImageLoader对象,同时传入图片加载缓存的配置,ImageLoaderConfiguration封装了基本的配置信息,比如加载图片事用的线程池大小,线程的优先级,内存缓存大小,是否支持同一图片的多尺寸缓存(默认是支持的,可以手动关闭),还有缓存的命名规则等等。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。

u013641294的博客 641

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

初识Universal-Image-Loader

Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。(1).使用多线程加载图片 (2).灵活配置ImageLoader的基本参数,包括线程数、缓存方式、图片显示选项等; (3).图片异步加载缓存机制,包括内存缓存及SDCard缓存; (4).采用监听器监听图片加载过程及相应事件的处理; (5)

年少的风 895

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)

这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影。        可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚接触的人来说可能太少了,下面我就把我使用过程中所知道的写了下来,希望可以帮助自己和别人更深入了解这个库的使用和配置。          GITHUB上的下载路径为:https:/

未来之路 的专栏 19万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android-Universal-Image-Loader

Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。

android_刘志乾 340

Android 图片加载工具类 Universal-Image-Loader 的封装和使用示例

Universal-Image-Loader 的封装和使用示例重点单例写法=>枚举通用性考虑性能考虑Universal-Image-Loader 已经实现的特殊效果圆角图片 (RoundedBitmapDisplayer(int cornerRadiusPixels))圆形图片 (CircleBitmapDisplayer())圆环图片 ( CircleBitmapDisplayer(Integer

Kevin的世界 2940

Android-Universal-Image-Loader的工具类封装

在Android开发中对图片资源的处理已经司空见惯了,如果还是使用Android API提供的方法来处理图片(尤其是网络图片),不仅复杂工作量大,而且还达不到好的一个效果.所以最终选择一些图片处理框架,如Android-Universal-Image-Loader,picasso(square出品,必属精品),Fresco(facebook家的),等等.本文主要就是讲Android-Univers

bighuan的博客 1450

Android第三方框架 Universal-Image-Loader的使用,进一步封装

Android第三方框架 Universal-Image-Loader的使用,进一步封装 1、新建MyApplication类 public class MyApplication extends Application { @Override public void onCreate() { // TODO Auto-generated method stub super.o

Cynicism_r的博客 394

Android-Universal-Image-Loader 架构梳理

源码地址:点击打开链接 Android-Universal-Image-Loader的广泛使用,我们有必要好好研究下他,对于我们使用,和进步都有很多的帮助, 从架构图上看,该项目分为五大部分。 1、Displayer,显示图片模块。这部分主要作用显示图片的,包括好几种显示图片的方式,如切边显示图片等。 通过调用display(Bitmap bitmap, ImageAware

心灵捕手的专栏 1439
上一篇: Okhttp 框架使用和源码分析
下一篇: 线程池的封装和使用(代理模式工厂模式)
Nela
博客等级 码龄11年 9粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值