RequestListener<Drawable> 可以直接区别图片类型但保存文件比较繁琐
RequestListener<File> 可以直接保存文件但无法区别图片类型
以下代码已经实践 有更优的方式请留言
Kotlin代码完成:
private val PATH_CAMERA_IMAGE = "/hanzhi/myImage"
public fun loadGlideImageByImageUrl(context: Context, url: String) {
var isGif: Boolean
GlideApp.with(context)
// Actually it won't download another time if the file has been cached
.load(url)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
return false
}
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
isGif = resource is GifDrawable
downloadImage(context, url, isGif)
return false
}
}).submit()
}
private fun downloadImage(context: Context, url: String, isGif: Boolean) {
GlideApp.with(context)
.download(url)
.listener(object : RequestListener<File> {
override fun onLoadFailed(e: GlideException?, model: Any, target: Target<File>, isFirstResource: Boolean): Boolean {
return false
}
override fun onResourceReady(resource: File, model: Any, target: Target<File>, dataSource: DataSource, isFirstResource: Boolean): Boolean {
//Use this uri for the Commit Content API
//获取到下载得到的图片,进行本地保存
val pictureFolder = Environment.getExternalStorageDirectory()
val appDir = File(pictureFolder, PATH_CAMERA_IMAGE)
if (!appDir.exists()) {
appDir.mkdirs()
}
var childName = ""
if (isGif) {
childName = "${System.currentTimeMillis()}.gif"
} else {
childName = "${System.currentTimeMillis()}.jpg"
}
val destFile = File(appDir, childName)
//复制文件
copyFile(resource, destFile)
if (!TextUtils.isEmpty(resource.toString())) {
showToast(context, "保存图片成功")
Util.broadcase(context, destFile)
} else {
showToast(context, "保存图片失败")
}
return false
}
}
)
.submit()
}
//刷新相册
public static void broadcase(Context context, File file) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Intent mediaScanIntent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri; //out is your output file
contentUri = Uri.fromFile(file);
mediaScanIntent.setData(contentUri);
context.sendBroadcast(mediaScanIntent);
} else {
context.sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param oldFile 输入文件
* @param newFile 输出文件
*/
public static void copyFile(File oldFile, File newFile) {
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream(oldFile);
fileOutputStream = new FileOutputStream(newFile);
byte[] buffer = new byte[1024];
while (fileInputStream.read(buffer) > 0) {
fileOutputStream.write(buffer);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fileInputStream.close();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
相关推荐
ROS入门(一)——ROS安装(vmware16+ubuntu20.04+ROS-Noetic)
嵌套:ROS可以在Ubuntu上运行,Ubuntu在虚拟机Vmware中安装。 从 虚拟机vmware安装→ubuntu安装→ros安装,逐步介绍安装ROS环境的过程。整个过程是我一步步跟着各种博客安装实现的,亲测可行。 版本: Vmware :Vmware Workstation16 Ubuntu :20.04 ROS :Noetic 其中vmware直接载当前最新版本就好,而ubuntu的版本要注意一下。 在ROS官网(cn - ROS Wiki),我们进入到ROS安装的步骤界面,可以看..
android保存png及gif到本地指定路径
android根据URL保存png及gif到本地指定路径 一、保存png到本地 步骤一:根据URL得到bitmap对象 public static Bitmap decodeUriAsBitmapFromNet(String url) { URL fileUrl = null; Bitmap bitmap = null; try { ...
14、OpenClaw(龙虾助手)Skill 开发完整规范(2026最新版)
OpenClaw Skill 开发指南摘要: Skill 是 OpenClaw AI 助手的核心扩展机制,支持声明式(SKILL.md)和原生代码(JS/TS/Python)两种开发模式。声明式 Skill 通过 Markdown 定义触发条件和执行流程,适合简单业务;原生代码 Skill 提供完整编程能力,适合复杂场景。开发需遵循标准化项目结构,包含 SKILL.md(元数据)、manifest.json(权限声明)等文件,并严格处理错误和多系统适配。新版要求原生 Skill 必须声明文件、网络等权限,确
Android中保存普通图片和gif图片到手机上
//保存gif图片 new Thread(new Runnable() { @Override public void run() { try { Utils.saveGifFile(origUrl); ...
Class AB OPA STB仿真相位异常:从corner case到碰撞电离的排查与规避
本文深入分析了Class AB运算放大器(OPA)在STB稳定性仿真中,特定工艺角(corner case)下出现相位从0°开始的异常现象。排查发现,其根本原因在于高Vds引发的碰撞电离效应,通过衬底和电源网络引入了隐藏的正反馈通路。文章对比了修改衬底连接与优化电路降低Vds两种解决方案,并基于工程实践推荐了代价更小、兼容性更好的电路优化方案,成功规避了问题并完成流片验证。
26届数字IC秋招笔试面试全攻略-UVM验证方法学精要
本文介绍了数字IC验证中UVM方法学的核心内容,包括组件架构、Sequence机制和寄存器模型。UVM提供env、agent、driver等组件构建验证环境;Sequence机制通过item、sequence和sequencer实现激励生成与控制;寄存器模型则通过reg_block、reg等组件管理DUT寄存器。文章详细说明了各模块的功能、交互关系和代码实现,为IC验证工程师提供了完整的UVM应用指南,重点突出了验证环境的搭建方法、激励生成流程和寄存器抽象技术。这些内容是数字IC秋招笔试面试中的高频考点。
Android 使用Glide4.9 压缩并保存图片(jpg/png/gif)到本地
项目中遇到,需要用户上传图片的场景。结果用户上传的、特别是拍摄后的图片,分辨率很大,长宽2000多3000甚至更高,一个图片5MB以上。 造成之后,从网络上加载这些图片,比较慢。 所以,不得不在上传前进行压缩后,再上传。
Unity内存优化:从崩溃到流畅的终极指南
Emscripten 为 WebAssembly 设定的内存布局(Static、Stack 和 Heap)为开发者提供了一个清晰的内存管理框架。理解这些内存区域的特性和用途,有助于开发者在 WebGL 项目中更有效地管理内存,优化性能,减少内存使用峰值。在 Unity WebGL 中,Dynamic Memory 是 UnityHeap 的主要组成部分,负责存储游戏运行时所需的各种数据。Dynamic Memory 主要分为两类:Managed Memory 和 Native Memory。
glide支持gzip压缩后的图片显示
glide支持gzip压缩后的图片显示源码问题处理方法1处理方法2 源码问题 昨天遇到一个很奇怪的事情,就是一张图片,在浏览器打开能正常显示,但是在Android上,就死活显示不出来,开始还以为是网站做了防盗链,但是通过代理,却能看到这张图片,通过二进制编码比较,发现glide缓存的文件和gzip压缩后的相同,于是确定是glide不支持gzip压缩后的图片,先尝试解码端解决,发现传过来的数据没法判...
YOLOv11改进 | 特殊场景检测篇 | 低照度图像增强网络SCINet改进黑暗目标检测(全网独家首发)
本文给大家带来的改进机制是低照度图像增强网络SCINet,SCINet(自校正照明网络)是一种专为低光照图像增强设计的框架。它通过级联照明学习过程和权重共享机制来处理图像,优化了照明部分以提升图像质量。我将该网络集成在YOLOv11的主干上针对于图像的输入进行增强,同时该网络的并不会增加参数和计算量,基本和普通的网络结构保持一致,同时该结构支持自定义调节层数,来控制图像增强的效果 ,非常适合想要在黑夜目标检测领域发表文章的读者,该基本网络不会影响模型的速度。欢迎大家订阅我的专栏一起学习YOLO!
在 SAP S/4HANA 本地部署和私有云里预览 RAP Travel App:为什么 ADT 发不出去,以及如何用 /IWFND/V4_ADMIN 正确发布 OData V4 Service
在SAP S/4HANA On-Premise/Private Cloud环境中,通过ADT直接发布RAP服务的本地端点常会失效。这是因为系统治理策略要求必须通过SAP Gateway Foundation(事务码/IWFND/V4_ADMIN)发布Service Group,而非开发者本机测试模式。本文详解了该流程的必要性:Service Group是OData V4服务的发布单元,涉及后端登记(/IWBEP/V4_ADMIN)和前端发布(/IWFND/V4_ADMIN)两个环节。提供了从ADT跳转SAP
gif动态框架使用问题(android-gif-drawable)
前言 今天,接触到了动态图。在网上了解到主要就是自定义ImageView,实现逐帧播放。在寻思一会后,决定采用github大神的https://github.com/koral--/android-gif-drawable方便快捷(或者gifView) 动态图实现 <pl.droidsonroids.gif.GifImageView android:layout_width="mat
核心面试聚焦:业务问题+系统问题+设计题---字节、阿里、美团等整理统计
业务系统及其他相关面试问题整理:线上相关问题排查+高并发系统的限流+高并发秒杀系统设计+负载均衡+一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出?
webp 动画 android,Android加载animated webp的控制和Glide加载GIF
因为动态的webp使用的也越来越多了,所以这里记录一种加载处理的办法。目前常用的Android图片加载库,只有fresco是可以直接加载animated webp的。那么如何处理呢?记录一下,不然坑都白踩了。本质上webp和gif都是一组图片组成的连续图片,如果要单独解析每一帧怎么办呢。Android支持如果要拿到webp的第一帧,在Android以上是可以直接使用如下这种方法,默认取的是第一帧,...
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
Android Glide 原理解析
Android Glide 原理解析一.提供的功能特性二.简单使用三.源码结构1.内存缓存(1)MemoryCache(2)BitmapPool(3)二级内存缓存2.磁盘缓存3.图片对应的Key4.Glide对象5.RequestManager—绑定生命周期6.GenericRequestBuilder对象7.Target对象8.RequestTracker对象9.Engine、EngineJob...
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
解决-Glide使用DiskLruCache缓存Gif图失效
1.Glide 2.DiskLruCache 3.Gif
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
Android_Glide_保存已经缓存的图片
Glide,一个图片加载框架,Google官方推荐使用的 官网,Github。 有关于坑,我觉得可以参考下这个。 Glide的基本使用: Glide.with(context).load(ImgUrl).into(ImageView); 进阶使用: Glide.with(context).load(ImgUrl) .asBitmap() .er
Android Studio||gif/glide/jre包导入失败/动态效果(内含源代码
终于成功了qwq。
用Glide加载Gif导致的卡顿,说一下你的优化思路,高级Android开发面试解答
/ 获取上一帧的Bitmap中的数据,并且将数据更新到dest中.// 2. 解析当前帧的数据到dest中= 1) {} else {//3.获取当前帧的数据dest,并且将数据存储到上一帧的image(Bitmap)中存储.// 4.获取新的Bitmap,将dest中的数据拷贝到Bitmap,提供给GifDrawable使用.看了上述代码流程,不够直观,下面画一张图,对比一下方便分析:3)Glide借助GifDrawable来播放GIF动画@Override。
Glide 5.0实战指南:8个核心技巧彻底解决Android图片加载性能问题
在Android应用开发中,图片加载性能直接影响用户体验和应用稳定性。Glide作为专注于平滑滚动的图片加载库,提供了强大的内存管理和缓存机制。然而,即使使用Glide,开发者仍可能面临OOM崩溃、列表卡顿、内存泄漏等问题。本文将深入剖析Glide 5.0的核心机制,通过8个实战技巧帮助中级开发者彻底解决图片加载的性能瓶颈。 **核心关键词**:Glide图片加载、Android内存优化、Rec
APNG4Android WebP 编码器实战:GIF 与 APNG 一键转 Animated WebP
你是否遇到过这样的场景:App 里躺着一堆动辄几 MB 的 GIF,加载慢、卡顿还费内存?或者拿到了精美的 APNG 动图,却发现体积感人、部分机型兼容性堪忧?**APNG4Android** 作为一款高性能的 Android 动画库,不仅支持 APNG、Animated WebP、GIF、Animated AVIF 的流畅播放,还内置了纯 Java 实现的 **WebP 编码器(awebpenc
Android图片加载框架之(Glide和Picasso的区别,Glide的简单使用)
Glide,一个被google所推荐的图片加载库,常见的还有Picasso,Fresco等,每一个都非常稳定,功能也都十分强大。但是它们的使用场景基本都是重合的,也就是说我们基本只需要选择其中一个来进行学习和使用就足够了,每一个框架都尝试去掌握的话则有些浪费时间。最常用的是Glide和Picasso,今天就针对于Glide和Picasso的区别,以及Glide的简单使用来进行具体介绍 Pica...
android 对glide封装,Glide库的封装使用
对Glide库不了解的朋友,可以先看看这篇文章 Glide图片加载库的使用本库主要有3部分组成,分别是:Glide的配置类,Glide的加载类,Glide的加载监听接口.配置类package com.example.mchenys.httputilsdemo.image.glide.cofig;import android.graphics.Bitmap;import android.view.V...
android glide读取图片字节流,从源码分析Android的Glide库的图片加载流程及特点
0.基础知识Glide中有一部分单词,我不知道用什么中文可以确切的表达出含义,用英文单词可能在行文中更加合适,还有一些词在Glide中有特别的含义,我理解的可能也不深入,这里先记录一下。(1)View: 一般情况下,指Android中的View及其子类控件(包括自定义的),尤其指ImageView。这些控件可在上面绘制Drawable(2)Target: Glide中重要的概念,目标。它即可以指封...
Android开发必备:Glide 4.12.0动图加载全攻略(附RecyclerView优化技巧)
本文深入解析了Glide 4.12.0在Android开发中的动图加载优化技巧,特别是与RecyclerView结合时的性能提升方案。通过核心机制解析、内存管理优化、缓存策略及异常处理等实战技巧,帮助开发者解决动图加载中的卡顿、内存溢出等问题,显著提升应用性能。
Android图片加载框架 Glide 4 的用法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/78582548本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。本篇将是我们这个Glide系列的最后一篇文章。其实在写这个系列第一篇文章的时候,Glide就推出4.0.0的RC版了。那个时候因为我一直研究的都是Glide 3.7.0版...
9741



被折叠的 条评论
为什么被折叠?



