xUtils系列之BitmapUtils

BitmapUtils 图片压缩,本地保存 立即下载
BitmapUtils支持对三种形式的图片资源进行加载,
分别是assets图片,sdcard图片和网络图片,使用LRU(最近最少使用算法),
通过磁盘缓存,程序缓存来避免OOM问题.


对于res里的图片,程序运行时就加载在内存中了,所以没必要使用BitmapUtils了


据作者解释,BitmapUtils没有采用单例模式,这样可以采用不同的默认配置来加载不同的图片.
BitmapUtils一共有两种配置BitmapGlobalConfig和BitmapDisplayConfig
BitmapGlobalConfig主要配置磁盘缓存路径,程序缓存大小(这个大小在源码中有限制),
BitmapDisplayConfig主要配置异步加载未完成时临时显示的图片,加载失败的图片,显示图片的最大Size,
加载图片动画,图片是否翻转,是否显示原图(不建议使用)等.


具体配置可以查看BitmapUtils中的源码,但是我本人觉得没有必要自己配置,默认的就挺好的.


下面是BitmapUtils简单的使用:

BitmapUtils bitmapUtils = new BitmapUtils(this);
// 加载网络图片
bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png");

// 加载本地图片(路径以/开头, 绝对路径)
bitmapUtils.display(testImageView, "/sdcard/test.jpg");

// 加载assets中的图片(路径以assets开头)
bitmapUtils.display(testImageView, "assets/img/wallpaper.jpg");

// 使用ListView等容器展示图片时可通过PauseOnScrollListener控制滑动和快速滑动过程中时候暂停加载图片
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener));

除此之外,我们可以给被加载的图片增加BitmapLoadCallBack,接收图片加载的各种状态,从而增加自己的处理:
testBitmapUtils.display(testImageView, "assets/img/wallpaper.jpg",new BitmapLoadCallBack<View>(){......});
以下是BitmapLoadCallBack的接口定义:

public abstract class BitmapLoadCallBack<T extends View> {

    /**
     * Call back when start loading.
     *
     * @param container
     * @param uri
     * @param config
     */
    public void onPreLoad(T container, String uri, BitmapDisplayConfig config) {
    }

    /**
     * Call back when start loading.
     *
     * @param container
     * @param uri
     * @param config
     */
    public void onLoadStarted(T container, String uri, BitmapDisplayConfig config) {
    }

    /**
     * Call back when loading.
     *
     * @param container
     * @param uri
     * @param config
     * @param total
     * @param current
     */
    public void onLoading(T container, String uri, BitmapDisplayConfig config, long total, long current) {
    }

    /**
     * Call back when bitmap has loaded.
     *
     * @param container
     * @param uri
     * @param bitmap
     * @param config
     */
    public abstract void onLoadCompleted(T container, String uri, Bitmap bitmap, BitmapDisplayConfig config, BitmapLoadFrom from);

    /**
     * Call back when bitmap failed to load.
     *
     * @param container
     * @param uri
     * @param drawable
     */
    public abstract void onLoadFailed(T container, String uri, Drawable drawable);

    private BitmapSetter<T> bitmapSetter;

    public void setBitmapSetter(BitmapSetter<T> bitmapSetter) {
        this.bitmapSetter = bitmapSetter;
    }

    public void setBitmap(T container, Bitmap bitmap) {
        if (bitmapSetter != null) {
            bitmapSetter.setBitmap(container, bitmap);
        } else if (container instanceof ImageView) {
            ((ImageView) container).setImageBitmap(bitmap);
        } else {
            container.setBackgroundDrawable(new BitmapDrawable(container.getResources(), bitmap));
        }
    }

    public void setDrawable(T container, Drawable drawable) {
        if (bitmapSetter != null) {
            bitmapSetter.setDrawable(container, drawable);
        } else if (container instanceof ImageView) {
            ((ImageView) container).setImageDrawable(drawable);
        } else {
            container.setBackgroundDrawable(drawable);
        }
    }

    public Drawable getDrawable(T container) {
        if (bitmapSetter != null) {
            return bitmapSetter.getDrawable(container);
        } else if (container instanceof ImageView) {
            return ((ImageView) container).getDrawable();
        } else {
            return container.getBackground();
        }
    }
}


以下是BitmapUtils的关键函数:
public <T extends View> void display(T container, String uri, BitmapDisplayConfig displayConfig, BitmapLoadCallBack<T> callBack) {
	if (container == null) {
		return;
	}

	if (callBack == null) {
		callBack = new DefaultBitmapLoadCallBack<T>();
	}

	if (displayConfig == null || displayConfig == defaultDisplayConfig) {
		displayConfig = defaultDisplayConfig.cloneNew();
	}

	// Optimize Max Size
	BitmapSize size = displayConfig.getBitmapMaxSize();
	displayConfig.setBitmapMaxSize(BitmapCommonUtils.optimizeMaxSizeByView(container, size.getWidth(), size.getHeight()));

	container.clearAnimation();

	if (TextUtils.isEmpty(uri)) {
		callBack.onLoadFailed(container, uri, displayConfig.getLoadFailedDrawable());
		return;
	}

	// start loading
	callBack.onPreLoad(container, uri, displayConfig);

	// find bitmap from mem cache.
	Bitmap bitmap = globalConfig.getBitmapCache().getBitmapFromMemCache(uri, displayConfig);

	if (bitmap != null) {
		callBack.onLoadStarted(container, uri, displayConfig);
		callBack.onLoadCompleted(
				container,
				uri,
				bitmap,
				displayConfig,
				BitmapLoadFrom.MEMORY_CACHE);
	} else if (!bitmapLoadTaskExist(container, uri, callBack)) {

		final BitmapLoadTask<T> loadTask = new BitmapLoadTask<T>(container, uri, displayConfig, callBack);

		// get executor
		PriorityExecutor executor = globalConfig.getBitmapLoadExecutor();
		File diskCacheFile = this.getBitmapFileFromDiskCache(uri);
		boolean diskCacheExist = diskCacheFile != null && diskCacheFile.exists();
		if (diskCacheExist && executor.isBusy()) {
			executor = globalConfig.getDiskCacheExecutor();
		}
		// set loading image
		Drawable loadingDrawable = displayConfig.getLoadingDrawable();
		callBack.setDrawable(container, new AsyncDrawable<T>(loadingDrawable, loadTask));

		loadTask.setPriority(displayConfig.getPriority());
		loadTask.executeOnExecutor(executor);
	}
}


bitmap工具类 bitmap工具类,给以用以避免OOM,强大 立即下载

相关推荐

BitmapUtils.java

Android对bmp文件的读写支持不好,该工具类是把Bitmap图片保存成8bit灰度bmp图片的工具类

Android工具类篇 位图 BitmapUtils (合成、裁剪、圆形、压缩、缩放)

import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.ImageFormat; import android

圈池 1242

Android BitmapUtils工具类使用详解

本文实例为大家分享了Android BitmapUtils工具类的具体代码,供大家参考,具体内容如下 public final class BitmapUtils { public static final String TAG = BitmapUtil; private static int sShotScreenWidth = 480; private static int sShotScreenHeight = 720; private static int sShotScreenSize = sShotScreenWidth * sShotScreenHeight

Android BitmapUtils工具类

Bitmap工具类 public final class BitmapUtils { public static final String TAG = "BitmapUtil"; private static int sShotScreenWidth = 480; private static int sShotScreenHeight = 720; ...

weixin_30871905的博客 202

BitmapUtils工具类

自定义的bitmap处理工具类

保姆级教程:在RK3568上搞定PR2100K+GC2385双摄(从DTS配置到HAL层补丁)

本文详细介绍了在RK3568平台上调试PR2100K+GC2385双摄系统的完整流程,从DTS配置到HAL层补丁。涵盖硬件连接、媒体控制器拓扑验证、Camera3配置、HAL层特殊补丁及性能优化等关键步骤,帮助开发者快速解决双摄调试中的常见问题,提升嵌入式视觉系统开发效率。

weixin_28724661的博客 196

XUtils开源项目---BitmapUtils图片处理

项目地址项目地址。。。。。。。 最近搜了XUtils进行学习,该开源库是目前git上比较活跃 功能比较完善的一个框架,是基于afinal开发的,比afinal稳定性提高了不少,该框架包含 DbUtils模块:android中的orm框架,一行代码就可以进行增删改查; ViewUtils模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定。 Http

全干工程师 8767

AVS3代码阅读HPM4.0

参考AVS3代码阅读(HPM6.0)(一.整体架构以及CU划分部分代码) 版本:HPM4.0 核心文件:app_encoder.c   要做的是帧间预测,所以前面的函数先暂时不管了,挖个坑以后再填。直接从enc_pic看起。 enc_pic()    ...

CRR的博客 3187

Android BitmapUtils工具类,Android校招面试经验汇总

我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。//取两层绘制交集。

m0_61369275的博客 873

SSE(Server-Sent Events)完整使用示例

本篇使用Node.js 作为服务端,在浏览器客户端演示SSE的完整实例和演示。实现了一个基于 Server-Sent Events (SSE) 的实时数据推送功能。

oscar999的专栏 750

倍福--RS232自由口实现

RS232/485通信协议是在现场中常用到的,比如触摸屏、温控模块等设备控控制器做通信,会常用到此类协议,本文介绍RS232/485自由口通信的实现,并用PC调试助手进行测试。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制器软件 3 硬件连接 3 2.1. PC COM介绍 3 2.2. RS232/RS485连接 3 3.2.1. N030…………. 4 3.2.2. N031…………. 4 2.3. 实际线路连接 5 PLC程序 7 3

weixin_41883890的博客 3284

BitmapUtils构造函数和一些常用方法整理

1.BitmapUtils构造方法   BitmapUtils(Context context)   BitmapUtils(Context context, String diskCachePath)  //创建缓存路径   BitmapUtils(Context context, String diskCachePath, int memoryCacheSize)    //缓存路径,内

xupingwei 1534

ZYNQ工业级串口方案:AXI UART 16550扩展RS-485实战(自动方向控制+Linux驱动)

可以轻松扩展出多路工业级串口。但常规方案需要手动控制收发方向(DE/RE引脚),存在实时性差、CPU占用高等痛点。本文从硬件逻辑设计到Linux驱动开发,完整实现了ZYNQ平台的RS-485工业通信方案。,解决了传统方案实时性差的痛点。所有代码均经过实际项目验证,可直接用于生产环境。:尝试将此设计扩展为多协议兼容接口(支持RS-422/RS-232切换)!等特性,依然是现场总线通信的首选。,通过硬件逻辑+Linux驱动协同设计,实现零延迟切换。在工业自动化、能源电力等场景中,RS-485凭借。

QQ_778132974的博客 830

xUtils框架的使用

xUtils简介 xUtils 包含了很多实用的android工具,xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM。 xUitls 最低兼容android 2.2 (api level 8)。 在aFinal基础上进行重构和扩展的框架,相比aFinal有很大的改善,基于网路的应用,只要...

切切歆语 132

2万字大厂面经:小米嵌入式面试题及参考答案(持续更新)

BIOS (Basic Input/Output System) 是一种存储在ROM中的固件程序,它为计算机提供了最基础的硬件初始化和服务。BIOS主要存在于传统的x86架构计算机中。嵌入式系统的启动流程取决于具体的硬件平台和所采用的操作系统。复位阶段:当系统通电或复位时,CPU进入复位状态。硬件初始化:CPU和必要的硬件设备(如内存控制器)被初始化。加载引导加载程序:引导加载程序(如U-Boot)被加载到内存中。执行引导加载程序:引导加载程序开始执行,初始化更多的硬件设备,并检测存储介质。

大模型大数据攻城狮的专栏 2529

Dify知识库文档批量下载神器:一键导出所有文件到本地

在使用Dify进行知识库管理的过程中,我们经常遇到一个实际问题:如何将已上传到知识库中的文档批量下载到本地?目前Dify的管理界面虽然功能强大,但暂时没有提供直接的UI界面来批量导出或下载知识库内的文档。这意味着如果我们需要将知识库中的文件备份到本地或进行离线处理,只能通过API接口来实现。本文将详细介绍如何利用Dify的REST API构建一个完整的知识库文档下载解决方案,这也是目前实现知识库文件批量下载到本地的唯一可行路径。🎉进入大模型应用与实战专栏 | 🚀查看更多专栏内容首先,我们需要在Dify的

羊城迷鹿的博客 3473

真香定律!Android动态换肤实现原理解析,原理+实战+视频+源码

自己项目中一直都是用的开源的xUtils框架,包括BitmapUtils、DbUtils、ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的。最近决定研究一下xUtils的源码,用了这么久总得知道它的实现原理吧。我是先从先从BitmapUtils模块开始的。BitmapUtils和大多数图片加载框架一样,都是基于内存-文件-网络三级缓存。也就是加载图片的时候首先从内存缓存中取,如果没有再从文件缓存中取,如果文件缓存没有取到,就从网络下载图片并且加入内存和文件缓存。 这篇帖子先分析

m0_57081562的博客 154

智能车图像处理11-进阶篇3--中线累积差值的统计

中线累积差值的统计在后面判断小S,以及长直道的时候都有用到,关键点在于中线的跳变 第12 - 13 行:comulants1 和comlants2代表的是两种不同的累差,取的行数不同 第14-17 行:comulants2取6到25行,其实就是My_Abs(LCenter[i], LCenter[i - 1])的累加 第18-21 行:comulants1去第1到40行 第27- 行: 计算了一下右线的开始于最终结束行,这里判断R_black是否为0,是和中线的提取中g

taiyuezyh的博客 3827

android开源系列之——xUtils 开源库

github地址: 使用方式: ## xUtils简介 * xUtils 包含了很多实用的android工具。 * xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... * xUitls最低兼容android 2.2 (api lev

西北狼神 1305

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

xUtils使用详解(一)

一直都听闻有个xUtils,但是没有使用过。最近有一个小项目,需要快速开发,工期较短,所以,就想到了xUtils。     目前xUtils已经发布到xUtils3,所以,我们就按照xUtils3的规范来开发。xUtils系列框架提供的功能主要有四大模块,ViewUtils模块、BitmapUtils模块、DbUtils模块、HttpUtils模块。下面,我们就从这4方面介绍具体xUtils3的

程序员七哥 5866

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

yy1.6 xUtils BitmapUtils的使用

1 public class MainActivity extends Activity { 2 3 public String[] urls = new String[] { 4 "image.baidu.com/i?tn=download&ipn=dwnl&word=%E9%AB%98%E6%B8%85&ie=...

weixin_30339457的博客 166

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

网络连接之———xUtils框架 介绍(二)

由上一篇的介绍,我们已经知道了,xUtils中有四大组件可以供我们使用,分别是ViewUtils、HttpUtils、BitmapUtils以及DbUtils。 如果你没能先读一下我的[上篇文章](http://blog.youkuaiyun.com/womengmengyan/article/details/48441299),那么请你移步过去先整体了解一下,再回过头来看这篇文章,相信你回更有体会的。

womengmengyan的博客 956

商城项目实战 | 10.1 xUtils3 详细介绍以及 ViewUtils 的使用方法

本文为菜鸟窝作者刘婷的连载。”商城项目实战”系列来聊聊仿”京东淘宝的购物商城”如何实现。 刚开始的时候,在 GitHub 上面出现了一款强大的开源框架叫 xUtils,里面包含了很多实用的android工具,并且支持大文件上传,更全面的 http 请求协议支持(10种谓词),拥有更加灵活的 ORM,更多的事件注解支持且不受混淆影响,该框架最低兼容版本为 android 2.2 (api level

LT5505的博客 624

安卓谷歌电子市场学习笔记系列——BitmapHelper

在加载图片的时候用到xUtils里的BitmapUtils,但是这个类它不是单例的,从而引起了我对单例设计模式的思考,参考(http://zhidao.baidu.com/link?url=9KTzarRoZBYFeHHnx17AJXhRVjH2X6S4LrbNMAhUWR3334rc6J9U12sNhtj9nRb89SNgAFV04mcOZKHYcHoNiK) bitmap不需要创建很多实

kerwinJu的博客 704

1年来关于android开发的一些破烂的经验 1/2

常用的一些git的项目 xutils pulltorefresh NiftyDialogEffects Gson 目录 常用的一些git的项目 目录 xutils 代码块 脚注 数学公式 UML 图 离线写博客 浏览器兼容 xutils 这里是git的链接地址 https://github.com/wyouflf/xUtils 代码块 代码块语

414
上一篇: xUtils系列之DbUtils-查询
下一篇: xUtils系列之HttpUtils
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值