在最近做的直播项目中,产品要求发送礼物时,需要显示对应的礼物动画,其中几个礼物动画效果如下:

看了这几个动画效果,是挺炫酷的,妥妥的能够增加用户体验,但是实现起来可就没那么容易了。

Android中动画实现方案,主要有以下几种:

(1)Frame Animation(逐帧动画)

(2)Tween Animation (补间动画)

(3)Property Animation(属性动画)

(4)GIF/WebP动画图片

逐帧动画需要UI设计师将每个动画拆成一张张的图片,那么每一个礼物动画都需要一套帧动画图片,这样无疑会增加
安装包的体积。

补间动画或者属性动画开发实现难度较大

GIF动画,就是每一个动画就是一张GIF图片,但是GIF动画图片较大,一般的GIF图片都要几兆到几十兆,这样在移动设备
上去播放这个动画,性能体验上就比较差了。

WebP动画图片体积要比GIF动画图片小很多复杂,WebP动图在编解码时,性能上表现得差强人意,而且虽然Android在
4.0时开始支持WebP,但是要支持有损且带透明像素的WebP得到Android 4.2.1之后。

除了以上几种动画实现方案,还有一些动画框架可供我们去使用,这些动画框架使用起来普遍比较方便,
UI设计师按照约定的动画语法作图给开发人员即可,开发人员使用框架中指定的方式去播放动画即可。
现在主流的动画播放框架主要有Lottie,SVGA。
Lottie,SVGA这两个动画框架都同时支持Android,iOS。

因为我选择的是SVGA动画框架,下面主要讲一下SVGA动画框架。
SVGA动画框架是YY开源的一个动画框架,SVGA是一种全新的动画格式,同时兼容Android,iOS,Web多个平台。
SVGA提供了一整套的动画解决方案:

设计师:设计师可以通过插件快速的导出SVGA动画文件。
具体可参考:http://svga.io/designer.html

开发者:开发者可以简单的接入动画
Android/iOS/Web可以参考如下接入
https://github.com/yyued/SVGAPlayer-iOS
https://github.com/yyued/SVGAPlayer-Android
https://github.com/yyued/SVGAPlayer-Web

设计师生成了SVGA动画文件后,为了获知动画文件是否正常,动画效果怎么样,可以通过动画预览器
来预览动画文件。
http://svga.io/svga-preview.html

Android中使用
下面简单介绍一下Android中集成SVGA,实现礼物动画。

(1)首先拿到UI设计师做好的SVGA动画文件,放到项目的asstes文件夹中

(2)添加SVGA依赖,参考https://github.com/yyued/SVGAPlayer-Android中
SVGA依赖的添加

    allprojects {repositories {...maven { url 'https://jitpack.io' }}
}compile 'com.github.yyued:SVGAPlayer-Android:2.1.8'

(3)在布局文件中添加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:autoPlay="true"android:background="#000" /></RelativeLayout>
    /*** 播放礼物动画*/private void playGiftAnimation() {mSVGAParse.parse(animationFileName, new SVGAParser.ParseCompletion() {@Overridepublic void onComplete(SVGAVideoEntity mSVGAVideoEntity) {mGiftAnimSIV.setVisibility(View.VISIBLE);SVGADrawable drawable = new SVGADrawable(mSVGAVideoEntity);mGiftAnimSIV.setImageDrawable(drawable);mGiftAnimSIV.startAnimation();}@Overridepublic void onError() {ToastUtil.showShort(mActivity, getString(R.string.prompt_gift_parse_fail));}});}

其中animationFileName就是放到assets中的SVGA动画文件名

 /*** 礼物动画播放监听*/mGiftAnimSIV.setCallback(new SVGACallback() {@Overridepublic void onPause() {}@Overridepublic void onFinished() {mGiftAnimSIV.setVisibility(View.GONE);}@Overridepublic void onRepeat() {}@Overridepublic void onStep(int frame, double percentage) {}});

以上就是SVGA在Android中的简单实用。具体的实用请参考官方的文档和Demo。

Android 直播礼物动画实现之SVGA动画相关推荐

  1. uniapp中使用svga动画

    1.首先什么是svga动画 SVGA(http://svga.io/index.html) 是一种跨平台的开源动画格式,同时兼容 iOS / Android / Flutter / Web. SVGA ...

  2. 面向直播svga动画初学者,svga文件是什么

    直播动画用的SVGA文件是什么? 从动效设计到开发实现中,总会遇到很多问题. 设计师纠结动画还原帧率低.有色差.格式多.标注动效麻烦.开发没有按效果来做-开发工程师纠结于文件太大.性能差.开发麻烦.设 ...

  3. Android SVGA动画

    官方地址 https://svga.io/ 介绍 全新的动画格式 高性能动画播放体验 SVGA 是一种同时兼容 iOS / Android / Flutter / Web 多个平台的动画格式. 使用 ...

  4. svga-前端如何使用svga动画

    前言 今天由于公司开发的直播间有发送礼物的需求,这里由于svga动画相对于gif图更加可控,所以使用svga动画,现在做个记录 正文 定义 SVGA(http://svga.io/index.html ...

  5. svga文件预览_SVGA文件格式——SVGA动画制作和文件转换

    什么是SVGA SVG,它的英文全称为Scalable Vector Graphics,即可伸缩矢量图形. SVGA,就是Scalable Vector Graphics Animetion,即可伸缩 ...

  6. Android动画之帧动画和补间动画

    Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...

  7. android窗口退出动画,如何在Android中为弹出窗口制作动画

    PopupWindow自定义布局更方便,并且显示位置自由,没有任何限制.使用下面的代码并享受动画.在此动画中,使用底部滑入和滑出,但是您只能更改滑入/滑出动画,并根据您的动画对应用程序中的任何位置进行 ...

  8. Android Property Animation属性动画:scale缩放动画(4)

     Android Property Animation属性动画:scale缩放动画(4) 和之前我写的附录文章1,2,3相似,本文将接着使用Android Property Animation属性 ...

  9. Android模仿iPhone View旋转刷新数据动画详解

    因为小马很喜欢在不同的页面之间跳转时加点好玩的动画,今天无意间看到一个动画效果感觉不错,几种效果图如下,既然好玩就写在博客中,直接说就是:该效果类似于iPhone中View的切换动画效果,今天就只介绍 ...

  10. android 中间按钮突出,Android 实现 按钮从两边移到中间动画效果

    Android 实现 按钮从两边移到中间动画效果html package org.shuxiang.test; import android.app.Activity; import android. ...

最新文章

  1. 程序员最讨厌的9句话,你可有补充?
  2. 千亿化妆品市场规模背后,女人正在失去不化妆的权利
  3. python完全支持面向对象编程_[Python] 类与面向对象编程
  4. topcoder srm 490 div1
  5. 基于OpenCL的数字地形分析之坡度坡向提取
  6. cf D. Dima and Hares
  7. 你必须懂的Java对象引用
  8. vc 串口 实时保存_Arduino提高篇22—实时时钟DS1302
  9. 驱动兼容_「图」英特尔DCH驱动新版发布:重点修复Windows 10兼容性问题
  10. MFC windows程序设计(第三版)课后习题第一章
  11. 射频识别技术漫谈(23)——ISO15693的载波、调制与编码
  12. windows 7 静默 安装 软件
  13. phpDesigner 工具快捷键巧用
  14. 独自封装windows 10系统详细教程(二)
  15. 金融学习之十一——久期
  16. 别着急抢iPhone 13了!拍照有马赛克,苹果确认部分iPhone13存在bug
  17. Android KitKat 外部存储权限分析
  18. poj 2187 凸包or旋转qia壳法
  19. Excel VBA 字典/数组 示例
  20. 五一 七曲山大庙烧香

热门文章

  1. 安川伺服在使用绝对值编码器时,电池的选用
  2. Linux修改http为https访问
  3. 【Spring基础】CGLIB动态代理实现原理
  4. xampp的安装及使用
  5. msdn下载的系统怎么安装
  6. 惠威D1080带来精致听音感受
  7. 【数据分析师---数据可视化】第二章:plotly绘图进阶篇(地图可视化,动态数据可视化)
  8. linux-LNMP一键安装Error: MySQL install failed. Error: PHP install failed
  9. Centos7 64位镜像下载
  10. 基于IPQAM的VOD低成本方案