关于安卓SVGA浅尝(一)svgaplayer库的使用
关于安卓SVGA浅尝(一)使用

相关链接
SVGA官网
SVGA-github说明文档
背景
项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项目中用到了svga的动画,因此,就有了这一系列的文章。
使用
(1)引入
首先,引入的方式,大致有两种:
一种是直接使用远程依赖,示例代码如下:
工程 build.gradle 中,添加仓库allprojects {repositories {...maven { url 'https://jitpack.io' }}
}
然后,在应用 build.gradle 中添加依赖。
compile 'com.github.yyued:SVGAPlayer-Android:latest'
第二种,就是把项目中的library拉下来,进行项目中的module依赖。
由于目前该svga库官方已经声明不再进行维护了,建议直接拉下来,作为model引入到项目中。
(2)混淆
使用以下的代码进行混淆:
-keep class com.squareup.wire.** { *; }
-keep class com.opensource.svgaplayer.proto.** { *; }
(3)初始化
使用前,需要对SVGAParser进行初始化,才能进行使用。
注意,如果是对一些资源涉及到预加载等情况,的确是需要对SVGAParser进行初始化。
但是,如果仅仅是使用SVGAImageView进行数据显示(XML中指定资源路径),则无需初始化,因为通过阅读源代码发现,在使用SVGAImageView的过程中,其方法parserSource()会进行SVGAParser的初始化。
(一)xml布局中,直接声明svga控件需要播放的动画:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><com.opensource.svgaplayer.SVGAImageViewandroid:layout_height="match_parent"android:layout_width="match_parent"app:source="posche.svga"app:autoPlay="true"android:background="#000" /></RelativeLayout>
启动页面,即可进行预览,效果图如下:

更多的xml使用标签,请参阅官方文档。
这里就是使用xml进行svga实现的一个方法。但是这种方法一般局限性都比较大,所以这里介绍另外一种方法,“使用代码进行实现“。
(二)使用代码实现:
初始化:
SVGAImageView imageView = new SVGAImageView(this);
parser = SVGAParser.shareParser()
SVGAParser.shareParser().init(this);
加载资源:
创建一个 SVGAParser 实例,加载 assets 中的动画。parser = new SVGAParser(this);
// 第三个为可缺省参数,默认为 null,如果设置该方法,则内部不在处理音频的解析以及播放,会通过 PlayCallback 把音频 File 实例回传给开发者,有开发者自行控制音频的播放与停止。
parser.decodeFromAssets("posche.svga", object : SVGAParser.ParseCompletion {// ...
}, object : SVGAParser.PlayCallback {// The default is null, can not be set
})创建一个 SVGAParser 实例,加载远端服务器中的动画。parser = new SVGAParser(this);
// 第三个为可缺省参数,默认为 null,如果设置该方法,则内部不在处理音频的解析以及播放,会通过 PlayCallback 把音频 File 实例回传给开发者,有开发者自行控制音频的播放与停止。
parser.decodeFromURL(new URL("https://github.com/yyued/SVGA-Samples/blob/master/posche.svga?raw=true"), new SVGAParser.ParseCompletion() {// ...
}, object : SVGAParser.PlayCallback {// The default is null, can not be set
})创建一个 SVGADrawable 实例,并赋值给 SVGAImageView,然后播放动画。parser = new SVGAParser(this);
parser.decodeFromURL(..., new SVGAParser.ParseCompletion() {@Overridepublic void onComplete(@NotNull SVGAVideoEntity videoItem) {SVGADrawable drawable = new SVGADrawable(videoItem);imageView.setImageDrawable(drawable);imageView.startAnimation();}@Overridepublic void onError() {}
});
上述就是加载,显示svga的方式。可以看出,加载的资源可以是本地,也可以是服务端。而对于服务端的资源,缓存逻辑则需要自行定义,最后,通过一个加载回调,复制数据到控件中,则可以进行动画显示。
缓存逻辑示例代码如下:
val cacheDir = File(context.applicationContext.cacheDir, "http")
HttpResponseCache.install(cacheDir, 1024 * 1024 * 128)
而最后的SVGASoundManager,就是一个svga的音频播放管理类,相关的api这里就不在意义叙述,可以参看官方文档进行查看。
关于svga的初步使用,就介绍到这里,后续将会深入介绍svga实现方式,加载原理等逻辑
that’s all---------------------------------------------------------------------
相关文章:
关于安卓SVGA浅尝(一)svgaplayer库的使用
关于安卓SVGA浅尝(一)使用 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项目中…...
【LFU】一文让你弄清 Redis LFU 页面置换算法
上一次,相信大家已经知道关于 LRU 页面置换算法的思想和实现了,这里可以一键直达: 【LRU】一文让你弄清 Redis LRU 页面置换算法 Redis 的淘汰策略中,关于 LFU 页面置换算法,今天咱们来捋一捋到底思想是啥࿰…...
Python爬虫实战:用简单四步爬取小红书图片
小红书是一个热门的社交分享平台,汇聚了大量精美的图片。如果您希望保存或使用这些图片,本文将为您详细介绍如何使用Python爬虫轻松爬取小红书图片。 一、安装必要的库 在开始之前,确保您已经安装了以下Python库: requests&#…...
行为型模式-解释器模式
提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 意图:给定一个语言,定义它的文法表示,并定义一个解释…...
Linux系统编程(五):信号
参考引用 UNIX 环境高级编程 (第3版)黑马程序员-Linux 系统编程 1. 信号基础理论 1.1 概念和机制 概念 信号在生活中随处可见,如:古代战争中摔杯为号、现代战争中的信号弹、体育比赛中使用的信号枪他们都有共性:简单、不能携带大量信息、满足…...
学习路之工具--SecureCRT的下载、安装
百度盘: 链接: https://pan.baidu.com/s/1r3HjEj053cKys54DTqLM4A?pwdgcac 提取码: gcac 复制这段内容后打开百度网盘手机App,操作更方便哦 感谢大佬 简单介绍下SecureCRT SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序&a…...
软件定义网络-OpenvSwitch
软件定义网络(SDN)。它主要有以下三个特点: 控制与转发分离:转发平面就是一个个虚拟或者物理的网络设备,就像小区里面的一条条路。控制平面就是统一的控制中心,就像小区物业的监控室。它们原来是一起的&…...
Android Update Engine 分析(二十三)如何在升级后清除用户数据?
文章目录 0. 导读1. 擦除用户数据流程1.1 制作升级包阶段1. 制作升级包的 "--wipe-user-data" 选项2. 什么是 POWERWASH?1.2 OTA 升级阶段1. payload_properties.txt 文件中的 "POWERWASH=1"2. ApplyPayload 函数设置 InstallPlan3. PostinstallRunnerAct…...
分享从零开始学习网络设备配置--任务3.7 使用动态路由RIPv2实现网络连通
任务描述 某公司随着规模的不断扩大,路由器的数量开始有所增加。网络管理员发现原有的静态路由已经不适合现在的公司,实施动态路由RIPv2协议配置,实现网络中所有主机之间互相通信。 在路由器较多的网络环境中,手工配置静态路由…...
游戏录屏软件推荐,教你录制高清游戏视频
“有没有好用的游戏录屏软件推荐呀,最近当上了游戏主播,平台要求每天都要发一个游戏视频,可是我的游戏录屏软件太拉胯了,录制出来的视频非常糊,导致平台审核不通过,所以想问问大家有没有游戏录屏软件推荐一…...
四川眼科医院孙丰源教授团队为患者拔除1.4cm长“眼中钉”
在户外劳作进行一些危险性的操作时,如果不注意防护,就很容易造成一些意外事件发生。广元的张先生使用割草机除草时,被割草机断裂的锯片击伤了左眼,伤势严重,所幸在孙丰源教授团队的帮助下,及时获得了治疗&a…...
PHP 初学 GO 学习笔记
说要学GO,但是总是三天打鱼,两天晒网的,既然如此就记录到博客上,这样既能督促自己,也能随时查看自己学习的进度。 [2023-09-20] Go 语言最少有个 main() 函数。 iota : 特殊常量,可理解为 const 语句块中的行索引 …...
前端制作
使用float: left将格子左浮动。 设置格子背景颜色,字体颜色,鼠标放上去后的字体颜色和背景颜色 <style>.title {width: 100%;overflow: hidden;}.title-topic a { /*以下元素应用于topic*/float: left; /*左浮动,让12个格子在…...
扩散模型:DDPM代码的学习(基于minist数据集)
文章目录 序言一参考资料①代码来源②相关概念理解③公式推导及训练流程讲解④搜索问题的网站⑤模型运行的环境 二代码解读①模型②训练③测试 三主要训练过程的解析 序言 本文主要对一个基于minist数据集搭建的DDPM模型代码中各个模块的含义进行解析,初步记录了自…...
小程序-uniapp:URL Link / 适用于在移动端 从短信、邮件、微信外网页 等场景打开小程序任意页面
一、背景介绍 小程序URL Scheme、URL Link是微信小程序后台生成的一种地址,适用于从短信、邮件、微信外网页 等场景打开小程序任意页面。所以,适用性极强。可与微信扫码携带参数跳转到小程序指定页面技术互补 若在微信外打开,用户可以在浏览…...
干货 | 基于在线监控数据的非现场监管问题识别模型研究
以下内容整理自2023年夏季学期大数据能力提升项目《大数据实践课》同学们所做的期末答辩汇报。 我们汇报的题目是基于在线监控数据的非现场监管问题识别模型研究,我们的汇报将从五个部分展开。首先是项目背景说明,该项目是为了遏制企业逃避监管行为的发生…...
Spring Cloud Alibaba Gateway 简单使用
文章目录 Spring Cloud Alibaba Gateway1.Gateway简介2. 流量网关和服务网关的区别3. Spring Cloud Gateway 网关的搭建3.1 Spring Cloud Gateway 配置项的说明3.2 依赖导入3.3 配置文件 Spring Cloud Alibaba Gateway 1.Gateway简介 Spring Cloud Gateway是一个基于Spring F…...
两种fifo实现方式的差异
减少数据通路翻转来降低功耗: 以FIFO (当容量较小而使用寄存器作为存储部分)设计为例,虽然理论上可以使用比较简单的数据表项逐次移位的方式,实现FIFO 的先入先出功能,但是却应该使用维护读写指针的方式(数据表项寄存器则不用移位)实现先入先出的功能。因为数据表项逐次…...
孜然单授权系统V1.0[免费使用]
您还在为授权系统用哪家而发愁?孜然单授权系统为您解决苦恼,本系统永久免费。 是的,还是那个孜然,消失了一年不是跑路了是没有空,但是这些都是无关紧要的,为大家带来的孜然单授权系统至上我最高的诚意&…...
kubernetes问题(一)-异常事件
1 pod状态处于Evicted 0/1 现象: 1)kubectl get events发现“failed to garbage collect required amount of images”。 2)同时磁盘空间不足的节点有大量pod处于Evicted 0/1状态,但并未进行重新调度。 原因描述: …...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
