Android动画

2019-09-27  本文已影响0人  LeoFranz

Android动画分类:


视图动画

补间动画

可以在xml中定义动画,然后通过AnimationUtils.loadAnimation()方法加载动画资源,通过view.startAnimation实现动画。
也可以在代码中实现动画的创建
同样的,可以在xml动画资源中添加插值器,也可以在代码中添加插值器
常见实例:旋转加载动画,对一个view设置pivotX和pivotY为自身高宽的一半,然后能够设置旋转动画,设置重复;
网易云音乐按键重复波浪动画,设置几个重叠的圆形view,对每个view设置相同的scale+alpha动画,并设置不同的启动时间,这样就能创造出这样的效果惹。

逐帧动画

使用AnimationDrawable类控制播放。


属性动画

视图和属性有下列三点不同,视图动画在android.view.animation中,属性动画在android.animation中。视图动画命名为XXXAnimation,属性动画为XXXAnimator

它实际上是一种不断地对值进行操作的机制,并将值赋值到指定对象的指定属性上,可以是任意对象的任意属性

属性动画也可以在xml中定义

核心类:ValueAnimator,其常用实现类 ObjectAnimator
利用AnimatorSet将不同动画组合起来,AnimatorSet的setduration对动画起始没束缚作用,只能控制动画是否同时开始或开始顺序
监听器有AnimatorListener,其实现类有AnimatorListenerAdapter。
valueAnimator有监听器AnimatorUpdateListener

KeyFrame frame0 = KeyFrame.ofFloat(0.3f,12f);

表示进度哎30%时候动画数值为12f,常常和PropertyValuesHolder公用

KeyFrame frame0 = KeyFrame.ofFloat(0f,3f);
KeyFrame frame1 = KeyFrame.ofFloat(1f,4f);
PropertyValueHolder frameHolder = PropertyValueHolder.ofKeyFrame("ratation",frame0,frame1);
Animator animator = ObjectAnimator.ofPropertyValueHolder(mTv,frameHolder);

使用插值器,当前keyframe设置插值器作用范围是上一个keyFrame到当前keyFrame。动画的开始和结束以实际起始帧和结束帧为界定,至少需要两个关键帧

动画优化

很强了,参考资料:
https://github.com/LeeFranz/tech-documents
https://developer.android.com/topic/performance/index.html
https://developer.android.google.cn/guide/topics/graphics/hardware-accel.html
https://developer.android.google.cn/guide/topics/graphics/prop-animation.html

上一篇 下一篇

猜你喜欢

热点阅读