在上一篇博客Android的三种动画详解 中讲解了Android的帧动画、View动画(补间动画)、属性动画。 这三种动画已能解决绝大部分需求,但实际上,随着Android的发展,有越来越多的动画产生,有的是Android原生的,有的是三方开源的,本文就此做了一个简单的梳理。

1、Lottie动画(三方开源)

Lottie是Airbnb开源的一个支持 Android、iOS 以及 ReactNative,利用json文件的方式快速实现动画效果的库。Lottie 库目前在 Android 开发中尤其复杂动画效果上地位显著。点击进入其GitHub地址。

简单使用如下, 第一步,在xml布局中添加:

 //是否自动播放

第二步,在代码中设置:

LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);animationView.setAnimation("check.json");animationView.loop(true);animationView.playAnimation(); //此方法将加载文件并在后台解析动画,并在完成后异步开始呈现

官方效果图:

2、触摸反馈动画(Ripple Effect)(原生)

所谓触摸反馈动画就是一种点击效果,作用在可点击的 View 上时,当有点击事件时会有涟漪般的反馈效果,使用在按钮上是再好不过了。

Ripple 波纹效果有两种:

  • 1、有边界: ?android:attr/selectableItemBackground
  • 2、无边界,要求API21以上: ?android:attr/selectableItemBackgroundBorderless

代码示例如下:

Android除了三大动画,还有哪些动画?_第1张图片

3、揭露动画(Reveal Effect)

揭露动画在系统中很常见,就是类似波纹的效果, 从某一个点向四周展开或者从四周向某一点聚合起来。它是一个Android L(5.0)新增的动画效果。

可以用在 Activity 里面的 View 动画效果,用来揭露某个隐藏 View 的显示;
也可以使用在 Activity 跳转过渡动画中。
如下图使用时的一些效果:

Android除了三大动画,还有哪些动画?_第2张图片

应用可以调用**ViewAnimationUtils.createCircularReveal()**方法可以去创建一个RevealAnimator动画,这个方法代码如下:

public static Animator createCircularReveal(View view,          int centerX,  int centerY, float startRadius, float endRadius) {      return new RevealAnimator(view, centerX, centerY, startRadius, endRadius);  }  

这五个参数分别是:

  • view 操作的视图
  • centerX 动画开始的中心点X
  • centerY 动画开始的中心点Y
  • startRadius 动画开始半径
  • startRadius 动画结束半径

从继承关系上看,RevealAnimator是不同于三大动画的另一个动画类。

4、转场动画 & 共享元素(Activity 切换动画)

转场动画听名字就知道它的使用场景了,转场、转场自然是用在场景转换的时候:

转场效果我们一般用在 Activity 切换时的动画效果上;
共享元素一般我们使用在转换的前后两个页面有共同元素[注1]时;
同时也可以在 Activity 布局发生场景变化时,让其中的 View 产生相应的过渡动画。

共同元素[注1]:并非限制指作用的两个共享元素的状态、大小、显示位置完全相同。而是指两者在页面中要传递的内容相同,比如是从文章列表转到文章详情页面时的相同标题、主图等。如果共享元素的两者是不同的元素,一方面在显示时共享元素在将结束转场完成转换时会有显示的闪动,另一方面,如果两者表达的是不同的元素,用户也会感到很莫名。

话不多说,放上效果图:

在这里插入图片描述

详细介绍参考 Android动画详细教程

5、视图状态动画(Animate View State Changes)

所谓视图状态动画,就是 View 在状态改变时执行的动画效果。和之前我们通过 selector 选择器给 Button 设置不同状态下的背景效果是一样一样的。
当然,它的使用场景也是特定的:

当 View 的状态改变时,希望此时显示的效果和静态效果有所区分,即显示效果也做出相应的改变,比如 Z 轴抬高,大小改变、或其他动画效果等。

放上一个按钮被点击后设置的视图状态动画(点击时Z轴抬高):

Android除了三大动画,还有哪些动画?_第3张图片

详细介绍参考 Android动画详细教程

6、矢量图动画(Vector 动画)

不知道大家现在在开发中,在图标显示上是不是还在切各种尺寸的 .png 图片适配。现在我可是一直在使用 svg 图标(在开发中是通过转换成 Vector 再使用,现在 AS 中导入,可以自动完成转换,转换不成功的再用上面网址转换),svg 图标的好处自不用说了。那矢量图动画有是怎么回事呢?

VectorDrawable 一般是以 为根标签定义的 XML 文件,、、、 元素都有各自可以播放动画的属性。具体怎么生成具有动画效果的图标,可以在系列教程中查看。
我们可以在以下场景使用:

  • 具有动态变换效果的图标;
  • 也可以用在需要特定动画效果的 VectorDrawable 图片上。

详细介绍参考 Android动画详细教程

7、约束布局实现的关键帧动画(ConstraintSet 动画)

这个动画就比较新了,甚至连官方都没有提供完整的文档。这是通过 ConstraintLayout 实现的一种关键帧动画。

关键帧动画:(百度百科)任何动画要表现运动或变化,至少前后要给出两个不同的关键状态,而中间状态的变化和衔接电脑可以自动完成,在 Flash 中,表示关键状态的帧动画叫做关键帧动画
所谓关键帧动画,就是给需要动画效果的属性,准备一组与时间相关的值,这些值都是在动画序列中比较关键的帧中提取出来的,而其他时间帧中的值,可以用这些关键值,采用特定的插值方法计算得到,从而达到比较流畅的动画效果。

而 ConstraintSet 动画既然实现的是关键帧动画,那至少需要两个关键帧,而对于 ConstraintSet 来说每次需要的两个关键帧就是两种布局状态,而两种布局状态的转变过程 ConstraintSet 会生成一定的动画过渡。
那使用场景根据约束动画的说明也比较明显了,就是同一个布局需要重新调整布局内部 View 位置时使用。

详细介绍参考作者OCGYang的GitHub Android动画详细教程

更多相关文章

  1. 谁说Android的动画不廉价(四)之元素动画
  2. 谁说Android的动画不廉价(五)之水波纹动画
  3. LottieAnimationView 使用无法显示效果
  4. android 按钮背景色的渐变效果实现
  5. Android属性动画设置中心点
  6. Android实现CoverFlow效果
  7. SurfaceView设置透明效果
  8. Android RecyclerView 去掉滑动边缘阴影效果
  9. Android 使用CoordinatorLayout+AppBarLayout+CollapsingToolbar

随机推荐

  1. 获取系统内存
  2. Android访问WEBAPI,传递json
  3. Android(安卓)手机状态
  4. Android(安卓)HFP Profile 连接过程
  5. android滑动删除的一个开源项目SwipeDelM
  6. Android(安卓)P Wifi Enable 之后扫描流
  7. Android(安卓)中的 requestWindowFeature
  8. android:SQLiteOpenHelper
  9. BackHandler是全局的!!!
  10. ScrollView去掉半月阴影