欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SVGAPlayer-Android

程序员文章站 2022-05-04 07:49:40
...

SVGAPlayer

介绍

SVGAPlayer 是一个轻量的动画渲染库。你可以使用工具Adobe Animate CC 或者 Adobe After Effects 中导出动画文件,然后使用 SVGAPlayer 在移动设备上渲染并播放。

SVGAPlayer-Android 使用原生 Android Canvas 库渲染动画,为你提供高性能、低开销的动画体验。

如果你想要了解更多细节,请访问官方网站

用法

我们在这里介绍 SVGAPlayer-Android 的用法。想要知道如何导出动画,点击这里

使用 Gradle 安装

我们的 aar 包托管在 JitPack 上,你需要将 JitPack.io 仓库添加到工程 build.gradle 中。

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

然后,在应用 build.gradle 中添加依赖。

compile 'com.github.yyued:SVGAPlayer-Android:latest'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mS03YazX-1611386329319)(https://jitpack.io/v/yyued/SVGAPlayer-Android.svg)]

Parser 单例支持

SVGAParser 单例需要在使用之前初始化,
否则会上报错误信息:
Log.e("SVGAParser", "在配置 SVGAParser context 前, 无法解析 SVGA 文件。")

遮罩支持

请参阅此处 Dynamic · Matte Layer

混淆规则

-keep class com.squareup.wire.** { *; }
-keep class com.opensource.svgaplayer.proto.** { *; }

放置 svga 文件

SVGAPlayer 可以从本地 assets 目录,或者远端服务器上加载动画文件。

使用 XML

你可以使用 layout.xml 添加一个 SVGAImageView

<?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.SVGAImageView
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        app:source="posche.svga"
        app:autoPlay="true"
        android:background="#000" />

</RelativeLayout>

在 XML 中,允许定义以下这些标签:

source: String

用于表示 svga 文件的路径,提供一个在 assets 目录下的文件名,或者提供一个 http url 地址。

autoPlay: Boolean

默认为 true,当动画加载完成后,自动播放。

loopCount: Int

默认为 0,设置动画的循环次数,0 表示无限循环。

clearsAfterStop: Boolean

默认为 true,当动画播放完成后,是否清空画布。

fillMode: String

默认为 Forward,可以是 ForwardBackward

Forward 表示动画结束后,将停留在最后一帧。

Backward 表示动画结束后,将停留在第一帧。

使用代码

也可以使用代码添加 SVGAImageView

创建一个 SVGAImageView 实例

SVGAImageView imageView = new SVGAImageView(this);

声明一个 SVGAParser 单例.

parser = SVGAParser.shareParser()

初始化 SVGAParser 单例

必须在使用 SVGAParser 单例前初始化,

SVGAParser.shareParser().init(this);

否则会上报错误信息:
Log.e("SVGAParser", "在配置 SVGAParser context 前, 无法解析 SVGA 文件。")

你也可以自行创建 SVGAParser 实例。

创建一个 SVGAParser 实例,加载 assets 中的动画。

parser = new SVGAParser(this);
parser.decodeFromAssets("posche.svga", new SVGAParser.ParseCompletion() {
    
});

创建一个 SVGAParser 实例,加载远端服务器中的动画。

parser = new SVGAParser(this);
parser.decodeFromURL(new URL("https://github.com/yyued/SVGA-Samples/blob/master/posche.svga?raw=true"), new SVGAParser.ParseCompletion() {
    
});

创建一个 SVGADrawable 实例,并赋值给 SVGAImageView,然后播放动画。

parser = new SVGAParser(this);
parser.decodeFromURL(..., new SVGAParser.ParseCompletion() {
    @Override
    public void onComplete(@NotNull SVGAVideoEntity videoItem) {
        SVGADrawable drawable = new SVGADrawable(videoItem);
        imageView.setImageDrawable(drawable);
        imageView.startAnimation();
    }
    @Override
    public void onError() {

    }
});

缓存

SVGAParser 不会管理缓存,你需要自行实现缓存器。

设置 HttpResponseCache

SVGAParser 依赖 URLConnection, URLConnection 使用 HttpResponseCache 处理缓存。

添加代码至 Application.java:onCreate 以设置缓存。

val cacheDir = File(context.applicationContext.cacheDir, "http")
HttpResponseCache.install(cacheDir, 1024 * 1024 * 128)

SVGALogger

更新了内部 log 输出,可通过 SVGALogger 去管理和控制,默认是未启用 log 输出,开发者们也可以实现 ILogger 接口,做到外部捕获收集 log,方便排查问题
通过 setLogEnabled 方法设置日志是否开启
通过 injectSVGALoggerImp 方法注入自定义 ILogger 实现类

功能示例

APIs

请参阅此处 https://github.com/yyued/SVGAPlayer-Android/wiki/APIs

CHANGELOG

请参阅此处 CHANGELOG