网站创建桌面快捷方式,成都建网站,网站建设沟通话术,缓存图片 wordpress关于安卓SVGA浅尝#xff08;一#xff09;使用 相关链接
SVGA官网 SVGA-github说明文档
背景
项目开发#xff0c;都会和动画打交道#xff0c;动画的方案选取#xff0c;就有很多选择。如Json动画#xff0c;svga动画#xff0c;gif等等。各有各的优势。目前项目中…关于安卓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 version1.0 encodingutf-8?
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:orientationverticalandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentcom.opensource.svgaplayer.SVGAImageViewandroid:layout_heightmatch_parentandroid:layout_widthmatch_parentapp:sourceposche.svgaapp:autoPlaytrueandroid: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?rawtrue), 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---------------------------------------------------------------------