【Android笔记】动画相关知识

164 阅读3分钟

一、动画类基本知识

一、参考:重学Android-动画定义与使用

四种动画及View属性动画变体

1、Frame Animation

1、基本说明:帧动画,由一张张图片组成的动画;

2、Tween Animation

1、基本说明:补间动画

3、Property Animation

1、基本说明:属性动画

  1. 应用场景:针对activity或view;

2、 分类:分为ObjectAnimator和ValueAnimator;支持动画集(AnimatorSet)

image.png

4、Transition Animation

1、基本说明:过渡动画

5、变体:ViewPropertyAnimator  |  Android Developers

1、 定义:属于继承View的类 | android.view.ViewPropertyAnimator |

  1. 三种属性动画对照:Android 自定义View:属性动画
  • ViewPropertyAnimator、ObjectAnimator、ValueAnimator 这三种 Animator,它们其实是一种递进的关系:从左到右依次变得更加难用,也更加灵活。
  • 它们的性能是一样的,因为 ViewPropertyAnimator 和 ObjectAnimator 的内部实现其实都是 ValueAnimator,ObjectAnimator 更是本来就是 ValueAnimator 的子类。
  • 它们的差别只是使用的便捷性以及功能的灵活性。所以在实际使用时候的选择,只要遵循一个原则就行:尽量用简单的。

2、 常见动画效果与监听方法:Android开发 ViewPropertyAnimator 属性动画

3、 设置动画循环:

  1. 属性动画(Property Animation)中的 ViewPropertyAnimator
  2. 再不济在结束监听的时候调用自己方法;

4、 关于暂停

  1. 类中不含暂停方法,可以调用cancel进行取消动画,动画会停在一半;
  2. 此时调用原方法会继续执行,注意调用的方法类型;
  3. 给一个view同时设置两个方法,后面那个会覆盖前面的;
  4. 最好这么用,setStartDelay(0)是设置属性,不是只对本次生效:setStartDelay(0).start()
  • 简单demo:
    var  c=0
    binding.ivText.animate().translationY(10000f).setDuration(10000).start()
    binding.tvText.setOnClickListener {
        if (c%2==0){
            binding.ivText.animate().cancel()
        }else{
            binding.ivText.animate().translationY(10000f).setDuration(10000).start()
        }
        c++
    }
}

5、Pivot设置(缩放和旋转)动画起始位置:

  • 即设定中点:样例-让target绕底部的中心点旋转【默认时整个View的中点是中心】

  binding.pointView.post {
                 binding.targetView.pivotX = binding.targerView.width / 2.0F
                 binding.targetView.pivotY = binding.targerView.height.toFloat()
             }

二、使用Lottie

1、 Lottie - 轻松实现复杂的动画效果

  • Lottie代码中切换源可能会闪一下,有些时候不得不用俩lottie。
  1. Lottie - 轻松实现复杂的动画效果
  2. Lottie动画制作整理
  3. 使用Lottie动画导致内存暴增的原因之一
  4. Android Lottie 踩坑之 LottieAnimationView 缩放无效 4.1 ViewStub中动态生成lottie: fun createView(): LottieAnimationView? = itemView.findViewById(R.id.lav_lottie), xml外层若无一个Group,xml中设置宽高不会生效的。 4.2 加载字体位置

2、 动画,视频资源调用

val path = "android.resource://" + packageName + "/" + R.raw.xxx

三、Andro转场动画

1、Android转场动画的前世今生

四、插值器

1、 参考文档:Android Interpolator插值器详解_overshootinterpolator

1、OvershootInterpolator:越过再返回,设定成6F超级好玩;

  1. 结合这个:使用ConstraintLayout实现圆形菜单

2、BounceInterpolator:落地跳动

其他

1、使用ConstraintLayout实现圆形菜单

image.png

2、弹簧动画

1、基本说明:

  1. 当OvershootInterpolator与BounceInterpolator插值器不满足UI时,可以尝试该动画;
  2. SpringAnimation 详解-Android
  3. 仿IOS底部拉动库
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#F5F5F9" />
    <corners android:radius="100dp" />
</shape>

3、View.post是异步的

  • 所以想根据view自身参数进行动画,所有动画相关都要放在view.post中