在上一篇博客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

代码示例如下:

3、揭露动画(Reveal Effect)

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

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

应用可以调用**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动画详细教程

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

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

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

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

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

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

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

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

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

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

更多相关文章

  1. 安卓View理解总结
  2. 谁说Android的动画不廉价(四)之元素动画
  3. 谁说Android的动画不廉价(五)之水波纹动画
  4. android 悬浮窗口
  5. 用android:clipChildren来实现红心变大特效 - 喜糖
  6. Android实现CoverFlow效果
  7. Android属性动画设置中心点
  8. 2013.08.29——— android ObjectAnimator
  9. SurfaceView设置透明效果

随机推荐

  1. android 获取另一个apk的信息
  2. Android 同步请求导致系统崩溃android.os
  3. Android中Radio单选按钮操作
  4. Android Studio中使用Git报:Git Unauthor
  5. 玩懂Log,打开Android大门(sundy深入浅出)之
  6. Android之通过category跳转到指定的Activ
  7. Android对话框实例-注册对话框
  8. Android高手进阶——Android ANR解决案例
  9. Intent.FLAG_ACTIVITY_NEW_TASK和android
  10. 【android】Getting bitmap from a view