一、动画类基本知识
一、参考:重学Android-动画定义与使用
四种动画及View属性动画变体
1、Frame Animation
1、基本说明:帧动画,由一张张图片组成的动画;
2、Tween Animation
1、基本说明:补间动画
3、Property Animation
1、基本说明:属性动画
- 应用场景:针对activity或view;
2、 分类:分为ObjectAnimator和ValueAnimator;支持动画集(AnimatorSet)
4、Transition Animation
1、基本说明:过渡动画
5、变体:ViewPropertyAnimator | Android Developers
1、 定义:属于继承View的类 | android.view.ViewPropertyAnimator |
- 三种属性动画对照:Android 自定义View:属性动画
- ViewPropertyAnimator、ObjectAnimator、ValueAnimator 这三种 Animator,它们其实是一种递进的关系:从左到右依次变得更加难用,也更加灵活。
- 它们的性能是一样的,因为 ViewPropertyAnimator 和 ObjectAnimator 的内部实现其实都是 ValueAnimator,ObjectAnimator 更是本来就是 ValueAnimator 的子类。
- 它们的差别只是使用的便捷性以及功能的灵活性。所以在实际使用时候的选择,只要遵循一个原则就行:尽量用简单的。
2、 常见动画效果与监听方法:Android开发 ViewPropertyAnimator 属性动画
3、 设置动画循环:
- 属性动画(Property Animation)中的 ViewPropertyAnimator
- 再不济在结束监听的时候调用自己方法;
4、 关于暂停
- 类中不含暂停方法,可以调用cancel进行取消动画,动画会停在一半;
- 此时调用原方法会继续执行,注意调用的方法类型;
- 给一个view同时设置两个方法,后面那个会覆盖前面的;
- 最好这么用,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
- Lottie代码中切换源可能会闪一下,有些时候不得不用俩lottie。
- Lottie - 轻松实现复杂的动画效果
- Lottie动画制作整理
- 使用Lottie动画导致内存暴增的原因之一
- 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转场动画
- 比较实用的写法
- 参考xml写法:Android activity跳转动画,6种activity进入动画
四、插值器
1、 参考文档:Android Interpolator插值器详解_overshootinterpolator
1、OvershootInterpolator:越过再返回,设定成6F超级好玩;
2、BounceInterpolator:落地跳动
其他
1、使用ConstraintLayout实现圆形菜单
2、弹簧动画
1、基本说明:
- 当OvershootInterpolator与BounceInterpolator插值器不满足UI时,可以尝试该动画;
- SpringAnimation 详解-Android
- 仿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中