下面主要讲的是 Android 中加载 SVGA 格式图片,先看效果图:

我的操作顺序是点击:动画二,动画三,动画一,可以看出是依次播放出来的,下面讲的是如何实现上面的效果。

下面主要讲的内容是

  • 配置 gradle ,添加 SVGA 动画
  • 自定义 SVGA 工具类
  • 显示 SVGA 动画

分享一个直接播放 SVGA 动画的网站:http://svga.io/svga-preview.html

GitHub 下载地址:https://github.com/wuqingsen/MySVGA

1. 配置 gradle ,添加 SVGA 动画

首先再项目的 gradle 中添加下面代码:

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

如下图所示:

其次在 app 的 gradle 中加入下面代码:

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

如下图所示:

配置完成后,去找几个 SVGA 格式的动画,复制到项目中以便测试,我添加了四个动画,找不到的可以下载我的 Demo ,如下图所示:

2. 自定义 SVGA 工具类

准备工作完成后,就开始写程序了,首先根据需求自定义工具类以便使用,下面是我的工具类。

/*** author: wu* date: on 2018/11/28.* describe:SVGA工具类* 使用时首先调用初始化数据方法,* 然后再调用开始动画的方法*/public class SvgaUtils {private Context context;private ArrayList<String> stringList;private SVGAImageView svgaImage;private SVGAParser parser;public SvgaUtils(Context context,SVGAImageView svgaImage) {this.context = context;this.svgaImage = svgaImage;}/*** 初始化数据*/public void initAnimator() {parser = new SVGAParser(context);stringList = new ArrayList<>();//监听大动画的控件周期svgaImage.setCallback(new SVGACallback() {@Overridepublic void onPause() {Log.e("setCallback", "onPause");}@Overridepublic void onFinished() {//当动画结束,如果数组容器大于0,则移除容器第一位的数据,轮询播放动画。if (stringList != null && stringList.size() > 0) {stringList.remove(0);//如果移除之后的容器大于0,则开始展示新一个的大动画if (stringList != null && stringList.size() > 0) {try {parseSVGA();//解析加载动画} catch (Exception e) {}} else {stopSVGA();}} else {stopSVGA();}}@Overridepublic void onRepeat() {Log.e("setCallback", "onRepeat=" + stringList.size());stopSVGA();}@Overridepublic void onStep(int i, double v) {}});}/*** 显示动画*/public void startAnimator(String svgaName) {stringList.add(stringList.size(), svgaName + ".svga");//如果礼物容器列表的数量是1,则解析动画,如果数量不是1,则此处不解析动画,在上一个礼物解析完成之后加载再动画if (stringList.size() == 1) {parseSVGA();}}/*** 停止动画*/private void stopSVGA() {if (svgaImage.isAnimating() && stringList.size() == 0) {svgaImage.stopAnimation();}}/*** 解析加载动画*/private void parseSVGA() {if (stringList.size() > 0) {try {parser.parse(stringList.get(0), new SVGAParser.ParseCompletion() {@Overridepublic void onComplete(SVGAVideoEntity svgaVideoEntity) {//解析动画成功,到这里才真正的显示动画SVGADrawable drawable = new SVGADrawable(svgaVideoEntity);svgaImage.setImageDrawable(drawable);svgaImage.startAnimation();}@Overridepublic void onError() {//如果动画数组列表大于0,移除第一位的动画,继续循环解析if (stringList.size() > 0) {stringList.remove(0);parseSVGA();} else {stopSVGA();}}});} catch (Exception e) {}} else {stopSVGA();}}
}

可以看出,这里面主要有几个关键的方法:初始化数据,显示动画,停止动画和解析动画。

首先我们要初始化数据,里面添加了动画显示完成的监听,一旦完成便自动的显示下一个动画;其次调用开始动画的方法,里面创建了一个列表,先将动画存储在里面,然后一个个排队拿出来显示;最后是解析动画的方法,真正显示动画是在这个方法中进行的,解析动画完毕后,将动画显示出来。

3. 显示 SVGA 动画

首先要在布局中添加 SVGA ,如下面代码:

    <com.opensource.svgaplayer.SVGAImageViewandroid:id="@+id/svgaImage"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentTop="true"app:autoPlay="true"app:loopCount="1" />

其次去 Activity 中添加代码就可以显示出来动画了,如下面代码:

public class MainActivity extends AppCompatActivity {private Button button1, button2, button3, button4;private SVGAImageView svgaImage;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button1 = findViewById(R.id.button1);button2 = findViewById(R.id.button2);button3 = findViewById(R.id.button3);button4 = findViewById(R.id.button4);svgaImage = findViewById(R.id.svgaImage);final SvgaUtils svgaUtils = new SvgaUtils(MainActivity.this,svgaImage);svgaUtils.initAnimator();button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {svgaUtils.startAnimator("aixin");}});button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {svgaUtils.startAnimator("bujibao");}});button3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {svgaUtils.startAnimator("shengri");}});button4.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {svgaUtils.startAnimator("youleyuan");}});}
}

上面代码中的 "aixin"、"bujubao"、"shengri"、"youleyuan" 这是 SVGA 我复制过来动画的名字。~~

更多开发文档参考:https://github.com/yyued/SVGAPlayer-Android

Android中加载SVGA格式图片相关推荐

  1. 浅谈android中加载高清大图及图片压缩方式(二)

    这一讲就是本系列的第二篇,一起来聊下关于android中加载高清大图的问题,我们都知道如果我们直接加载原图的话,一个是非常慢,需要等待一定时间,如果没有在一定的时间内给用户响应的话,将会极大影响用户的 ...

  2. Android中加载事件的方式

    Android中加载事件的方式 通过内部类的方式实现 通过外部类的方式实现 通过属性的方式实现 通过自身实现接口的方式实现 通过内部类的方式实现 Demo btn_Login.setOnClickLi ...

  3. android中加载Gif图片

           很多时候由于项目的需要,我们需要加载Gif的图片,实现动画效果,但是android本身并不支持直接加载Gif图片.因此网络上出现了很多关于android加载Gif图片的框架.今天在这里就 ...

  4. VC中加载GIF格式动态图片的详细方法!

    最近老总说要把视图里的图标改成动态的,让其能够更形象的显示状态,所以我就百度了一下,还真没很详细的资料,但最终我还是东凑凑,西凑凑给凑出来了,下面说一下详细步骤吧: 1.下载 PictureEx.h和 ...

  5. VC下加载多种格式图片的方法总结

    From: http://www.cnblogs.com/Daywei/archive/2011/03/19/1988848.html 尽管VC有提供相应的API和类来操作bmp位图.图标和(增强)元 ...

  6. android glide加载不出图片_Glide实现共享元素无缝转场效果,只需四步!

    原文: How to Use Shared Element Transition with Glide in 4 steps 作者:Bartłomiej Osmałek 读完这篇文章, 你就会知道使用 ...

  7. Android 如何加载网页、图片以及PDF文件之项目实战

    这里对于App有需求需要做webView加载页面以及图片,pdf文件等,可以参考一下这篇文章: 我在做项目应用时,有个需求是把用户不同类型的数据上传到后台. 对于用户的数据大体分为以下类型: 图片(j ...

  8. 在WPF中加载gif动态图片

    向WPF中加载动态图片有很多种办法,下面介绍一种比较简单的办法. 右键项目,在管理程序包中添加XamlAnimatedGif包,进行安装. . 在设计文件中添加头文件XamlAnimatedGif的头 ...

  9. android中读取svg文件,Android如何加载SVG格式的矢量图

    为何要加载SVG图片 相对于.JPG和.PNG甚至.webp的图片来说,SVG的图片有两个优点,第一:省空间,APK瘦身有一个方面就是从图片瘦身,使用SVG图片可以大量减轻程序的大小.第二:省时间,切 ...

  10. Android 中加载网络资源时的优化 缓存和异步机制

    网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决.下面提出一些优化: 1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制 ...

最新文章

  1. SAP系统和微信集成的系列教程之八:100行代码在微信公众号里集成地图搜索功能
  2. verilog中值滤波算法实现及仿真
  3. 深入理解Activity启动流程(二)–Activity启动相关类的类图
  4. Java中List Set Map 是否有序等总结
  5. Sublime Text3自定义快捷键
  6. 南师大632c语言程序设计,单片机c语言学习心得632.docx
  7. ebm风扇选型手册_EBM风扇选择方法
  8. php中文件读写总结,PHP中文件读写操作
  9. 用于 Windows8 的 Wijmo Charts 图表控件
  10. 驻云学院:实战阿里云之数据库系列
  11. 原生Ajax实现formdata
  12. 安装永中office 2009个人版 点快捷方式无法运行
  13. exchange2010安装
  14. 微信线下门店二维码扫码支付和退款
  15. ​网红拉姆之死,这辈子最看不起这种男人!
  16. qq空间的相册名称java_空间相册名称大全
  17. 带自动还原魔方游戏源码
  18. 《亲自动手写一个深度学习框架》-专题视频课程-广州市老刘
  19. node之request模块
  20. 公司旅游--金华武义二日游

热门文章

  1. 我的世界装mod要下java_【新人必看教程】我的世界HMCL下载安装mod模组
  2. eviews7.2pojie版-eviews7.2附使用教程
  3. u盘ios刻录_win10 iso刻录到u盘操作教程
  4. mysql sjis 校对乱码_数据库乱码问题解决剖析
  5. fp-growth算法详解与实现
  6. 哨兵系列卫星介绍与下载教程
  7. 联盛德W806+INA226 = 功率计
  8. 系统管理:传统UNIX文件系统
  9. 在VFP里玩SQL查询
  10. Java 学生成绩管理系统