# SVGAPlayer-Ohos **Repository Path**: chinasoft5_ohos/SVGAPlayer-Ohos ## Basic Information - **Project Name**: SVGAPlayer-Ohos - **Description**: SVGAPlayer-Ohos 是一个轻量的动画渲染库 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2021-06-28 - **Last Updated**: 2022-06-12 ## Categories & Tags **Categories**: harmonyos-animate **Tags**: None ## README ## SVGAPlayer-Ohos ## 项目介绍 - 项目名称:SVGAPlayer-Ohos - 所属系列:openharmony的第三方组件适配移植 - 功能:`SVGAPlayer-Ohos` 是一个轻量的动画渲染库。你可以使用[工具](http://svga.io/designer.html)从 `Adobe Animate CC` 或者 `Adobe After Effects` 中导出动画文件,然后使用 `SVGAPlayer-Ohos` 在移动设备上渲染并播放。`SVGAPlayer-ohos` 使用原生 ohos Canvas 库渲染动画,为你提供高性能、低开销的动画体验。 - 项目移植状态:主功能完成 - 调用差异:无 - 开发版本:sdk6,DevEco Studio2.2 Beta1 - 基线版本:Release 2.5.15 ## 效果演示 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0628/154853_41148823_1264960.gif) ## 安装教程 方式一: 1.在项目根目录下的build.gradle文件中, ``` allprojects repositories { maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' } } } ``` 2.在entry模块的build.gradle文件中, ``` dependencies { implementation('com.gitee.chinasoft_ohos:SVGAPlayer-Ohos:1.0.1') ...... } ``` 在sdk6,DevEco Studio2.2 Beta1下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 ## 使用方式 SVGAParser 单例需要在使用之前初始化, 否则会上报错误信息: `Log.e("SVGAParser", "在配置 SVGAParser context 前, 无法解析 SVGA 文件。")` ###- 混淆规则 ``` -keep class com.squareup.wire.** { *; } -keep class com.opensource.svgaplayer.proto.** { *; } ``` ### 放置 svga 文件 SVGAPlayer 可以从本地 `resources/rawfile` 目录,或者远端服务器上加载动画文件。 ### 使用 XML 你可以使用 `layout.xml` 添加一个 `SVGAImageView`。 ```xml ``` 在 XML 中,允许定义以下这些标签: #### source: String 用于表示 svga 文件的路径,提供一个在 `resources/rawfile` 目录下的文件名,或者提供一个 http url 地址。 #### autoPlay: Boolean 默认为 `true`,当动画加载完成后,自动播放。 #### loopCount: Int 默认为 `0`,设置动画的循环次数,0 表示无限循环。 #### clearsAfterStop: Boolean 默认为 `true`,当动画播放完成后,是否清空画布。 #### clearsAfterDetached: Boolean 默认为 `true`,当 SVGAImageView 触发 onDetachedFromWindow 方法时,是否清空画布。 #### fillMode: String 默认为 `Forward`,可以是 `Forward`、 `Backward`。 `Forward` 表示动画结束后,将停留在最后一帧。 `Backward` 表示动画结束后,将停留在第一帧。 ### 使用代码 也可以使用代码添加 `SVGAImageView`。 #### 创建一个 `SVGAImageView` 实例 ```java SVGAImageView imageView = new SVGAImageView(this); ``` #### 声明一个 `SVGAParser` 单例. ```java parser = SVGAParser.shareParser() ``` #### 初始化 `SVGAParser` 单例 必须在使用 `SVGAParser` 单例前初始化, ```java SVGAParser.shareParser().init(this); ``` 否则会上报错误信息: `Log.e("SVGAParser", "在配置 SVGAParser context 前, 无法解析 SVGA 文件。")` 你也可以自行创建 `SVGAParser` 实例。 #### 创建一个 `SVGAParser` 实例,加载 resources/rawfile 中的动画。 ``` 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`,然后播放动画。 ``` SVGAParser svgaParser = SVGAParser.shareParser(); String name = this.randomSample(); LogUtil.loge("SVGA", "## name " + name); svgaParser.setFrameSize(100, 100); svgaParser.decodeFromAssets(name, new ParseCompletion() { @Override public void onComplete( SVGAVideoEntity videoItem) { animationView.setVideoItem(videoItem); animationView.stepToFrame(0, true); } @Override public void onError() { } }); ``` ### 缓存 `SVGAParser` 不会管理缓存,你需要自行实现缓存器。 #### 设置 HttpResponseCache `SVGAParser` 依赖 `URLConnection`, `URLConnection` 使用 `HttpResponseCache` 处理缓存。 添加代码至 `Application.java:onInitialize` 以设置缓存。 ``` File cacheDir = new File(context.applicationContext.cacheDir, "http") HttpResponseCache.install(cacheDir, 1024 * 1024 * 128) ``` ## 测试信息 ``` CodeCheck代码测试无异常 CloudTest代码测试无异常 病毒安全检测通过 当前版本demo功能与原组件基本无差异 ``` ## 版本迭代 - 1.0.1 - 1.0.0 - 0.0.1-SNAPSHOT ## 版权和许可信息 Apache License 2.0