• 关于安卓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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    第二种,就是把项目中的library拉下来,进行项目中的module依赖。

    由于目前该svga库官方已经声明不再进行维护了,建议直接拉下来,作为model引入到项目中。
    (2)混淆

    使用以下的代码进行混淆:

    -keep class com.squareup.wire.** { *; }
    -keep class com.opensource.svgaplayer.proto.** { *; }
    
    • 1
    • 2
    (3)初始化

    使用前,需要对SVGAParser进行初始化,才能进行使用。
    注意,如果是对一些资源涉及到预加载等情况,的确是需要对SVGAParser进行初始化。
    但是,如果仅仅是使用SVGAImageView进行数据显示(XML中指定资源路径),则无需初始化,因为通过阅读源代码发现,在使用SVGAImageView的过程中,其方法parserSource()会进行SVGAParser的初始化。

    (一)xml布局中,直接声明svga控件需要播放的动画:

    
    
    
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    启动页面,即可进行预览,效果图如下:
    请添加图片描述
    更多的xml使用标签,请参阅官方文档。
    这里就是使用xml进行svga实现的一个方法。但是这种方法一般局限性都比较大,所以这里介绍另外一种方法,“使用代码进行实现“。

    (二)使用代码实现:
    初始化:

    SVGAImageView imageView = new SVGAImageView(this);
    parser = SVGAParser.shareParser()
    SVGAParser.shareParser().init(this);
    
    • 1
    • 2
    • 3

    加载资源:

    创建一个 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() {
        @Override
        public void onComplete(@NotNull SVGAVideoEntity videoItem) {
            SVGADrawable drawable = new SVGADrawable(videoItem);
            imageView.setImageDrawable(drawable);
            imageView.startAnimation();
        }
        @Override
        public void onError() {
    
        }
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    上述就是加载,显示svga的方式。可以看出,加载的资源可以是本地,也可以是服务端。而对于服务端的资源,缓存逻辑则需要自行定义,最后,通过一个加载回调,复制数据到控件中,则可以进行动画显示。

    缓存逻辑示例代码如下:

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

    而最后的SVGASoundManager,就是一个svga的音频播放管理类,相关的api这里就不在意义叙述,可以参看官方文档进行查看。

    关于svga的初步使用,就介绍到这里,后续将会深入介绍svga实现方式,加载原理等逻辑

    that’s all---------------------------------------------------------------------

  • 相关阅读:
    永恒之黑漏洞复现
    Python笔记 · With语法糖
    myBatis基础学习笔记
    Nginx 日志配置
    制作macOS Ventura U盘启动盘教程
    Bash语法中的字符串拼接与比较
    16. 3Sum Closest
    LeetCode每日两题01:移动零 (均1200道)方法:双指针
    [题] 求特殊自然数 #十进制转n进制
    应用LLL算法解决背包问题
  • 原文地址:https://blog.csdn.net/motosheep/article/details/132920484