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库正是为了解决这些问题而产生的。 阅读详情

相关推荐

Sigrity XtractIM实战:5步搞定IC封装宽带模型提取(附BGA案例)

本文通过一个典型BGA封装案例,详细介绍了使用Cadence Sigrity XtractIM工具进行IC封装宽带模型提取的五步实战流程。内容涵盖从环境准备、参数设置、结果验证到模型导出的完整操作,重点阐述了如何利用XtractIM生成高精度、紧凑的宽带SPICE模型,以解决高速电路设计中因封装模型不准导致的信号与电源完整性问题,助力工程师提升仿真精度与设计效率。

a1b2c的博客 319

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

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

gitblog_00402的博客 821

保姆级教程:用PCAN-View监控汽车CAN总线,从硬件连接到报文分析(附快捷键大全)

本文提供了一份详细的PCAN-View使用教程,涵盖从硬件连接到报文分析的全流程,特别适合汽车电子工程师和初学者。内容包括硬件准备、软件安装、核心功能操作、高级技巧及故障排查,并附有实用的快捷键大全,帮助用户高效监控和分析CAN总线数据。

weixin_42542669的博客 497

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

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

jian_csdn的专栏 1206

基于ADRC算法的多旋翼飞行器抗扰动控制实践

本文详细介绍了基于ADRC算法的多旋翼飞行器抗扰动控制实践,通过线性扩张状态观测器(LESO)实时估算风力等扰动,实现提前补偿,显著提升飞行稳定性。文章结合具体案例和工程实现技巧,展示了ADRC在突风条件下的优异表现,为无人机控制提供了高效解决方案。

weixin_29284885的博客 191

RS232/RS485/CAN_BUS 通信原理总结与通信波形分析

分析一:232串口信号要点:RS232,全双工,采用三线制传输分别为TXD\RXD\GND,其中TXD为发送信号,RXD为接收信号。在RS232中任何一条信号线的电压均为负逻辑关系。即:-15v ~ -3v 代表1 +3v ~ +15v 代表0测试结果与分析:如图所示,以传输一个8位二进制数值“01101010”为例,异步传输数据的一般格式为:起始位+校验位+数据位+停止位。其中,校验位为可选项。...

乔木鱼 1万+

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

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

horsttnann的专栏 1287

23、管状剪纸结构的研究与功能生成连杆机构的综合设计

本文研究了管状剪纸结构的压缩运动特性,通过剪纸技术将非刚性可折叠的Yoshimura和Kresling折纸结构转化为刚性可折叠结构,并提出径向可闭合剪纸(RC-kiri)构型。推导了位移与折叠角之间的数学关系,设计了带外部LET接头的RC-kiri模型,建立了力-位移理论模型并通过Abaqus进行有限元验证,制作了3D打印物理模型以测量直径变化。同时,研究了四杆和六杆功能生成连杆机构的综合设计方法,基于负闭合运动链和最小二乘法实现函数生成。结果表明理论、仿真与实验整体吻合良好,误差来源得到分析,为机器人、机

nokia的博客 167

Universal-Image-Loader图片加载框架

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

Rosso_Wine的博客 832

作物生长模型Oryza V3实战9:控制文件参数详解

control.dat是ORYZA水稻模型的核心配置文件,主要包含三部分:1)基础参数设置与模拟时间定义;2)关键文件路径配置,包括土壤参数文件(soil.sol)、作物参数文件(cultivar.crp)、田间管理文件(manage.exp)及气象数据目录,同时指定输出结果文件(res.dat)和运行日志(model.log);3)可选参数和输出控制选项。该文件通过关联各类输入数据(气象、土壤、品种特性等)和输出结果,实现模型运行的全流程控制,支持参数调整后继续模拟和中断恢复功能。

221

手把手教你学simulink(41.4)--逆变器电场景示例:基于Simulink的主从控制的多逆变器协同控制(Multi-Inverter Coordinated Control)

需求分析在现代电力系统中,分布式发电和储能系统的广泛应用使得多个逆变器并联运行成为常见的应用场景。为了确保多个逆变器之间的协同工作,实现系统的稳定性和高效性,通常采用主从控制(Master-Slave Control)策略。主从控制通过一个主控制器(Master)来协调多个从控制器(Slave),确保所有逆变器的输出电压、频率和功率分配符合预期目标。本项目将基于Simulink平台,开发一个多逆变器协同控制系统,采用主从控制策略,实现对多个逆变器的精确控制和优化。

MHD0815的博客 306

android Universal-Image-Loader

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

bobo的博客 551

Ubuntu 22.04+/WSL2 中解决 `error: externally-managed-environment` 并成功安装 PyTorch + vLLM 的完整指南

Ubuntu 22.04+/WSL2 因遵循 PEP 668 规范,系统 Python 被标记为“外部管理”,导致直接使用 pip install 安装包时报错 externally-managed-environment。解决方案是创建虚拟环境: 通过 python3 -m venv ~/vllm-env 创建隔离环境 激活环境后安装 PyTorch(CUDA 12.1)和 vLLM 避免使用 sudo pip 或 --break-system-packages,防止破坏系统依赖 关键点: 虚拟环

刘一说的IT专栏 296

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

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

u013641294的博客 641

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

初识Universal-Image-Loader

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

年少的风 895

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

未来之路 的专栏 19万+

温度PID控制PLC程序

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

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、付费专栏及课程。

余额充值