下面记录下关于Android动画相关信息
内容参考:
Android开发(26)–补间动画(Tween)的实现
Android 属性动画(Property Animation) 完全解析 (上)
android动画大体分3类:
View Animation(Tween Animation) 补间动画
给出2个关键帧,通过算法将给定属性值 在给定时间内 在2个关键帧之间渐变;
补间动画只能应用于View对象,且只支持一部分属性
支持属性:
AlphaAnimation:透明度(alpha)渐变效果,对应alpha标签。
TranslateAnimation:位移渐变,需要指定移动点的开始和结束坐标,对应translate标签。
ScaleAnimation:缩放渐变,可以指定缩放的参考点,对应scale标签。
RotateAnimation:旋转渐变,可以指定旋转的参考点,对应rotate标签。
AnimationSet:组合渐变,支持组合多种渐变效果,对应set标签。
而且 补间动画只是改变视觉位置,但实际点击区域任然没有变化
使用方式
xml定义或者类中定义
demo:
TranslateAnimation translateAnimation = new TranslateAnimation(0,
200, 0, 0);
translateAnimation.setDuration(2000);
imageView.startAnimation(translateAnimation);
定义了一个平移动画,从(0,200)移动到(0,0);
动画执行时间2S
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="200"
android:toYDelta="0"
android:duration="2000"/>
还可以给动画设计监听
Animation.setAnimationListener(new AnimationListener())
补间动画还提供及Interpolator(插值器)来复制实现动画效果,例如先加速在减速,撞墙回弹等更多高级效果;
AccelerateInterpolator 非线性加速插值器
AccelerateDecelerateInterpolator 非线性减速插值器
LinearInterpolator 线性插值器
BounceInterpolator 弹跳插值器
AnticipateInterpolator 回荡秋千插值器
AnticipateOvershootInterpolator
CycleInterpolator 正弦周期变化插值器
OvershootInterpolator 超过目标1次后回复
更多详细请参见 android动画(一)Interpolator
Drawable Animatio 逐帧动画
顾名思义,需要提前定义好每一帧的图片,然后播放帧动画;
因为需要定义每一帧,所以一般使用xml定义方便;
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/frame_1" android:duration="200" />
<item android:drawable="@drawable/frame_2" android:duration="200" />
<item android:drawable="@drawable/frame_3" android:duration="200" />
<item android:drawable="@drawable/frame_4" android:duration="200" />
</animation-list>
java:
//将该逐帧xml文件设置为ImageView的背景
ImageView loadingImg = (ImageView) findViewById(R.id.loading);
loadingImg.setBackgroundResource(R.drawable.loading);
loadingAnimation = (AnimationDrawable) loadingImg.getBackground();
AnimationDrawable的start()方法不能够在Activity的onCreate()调用,因为这个时候,AnimationDrawable可能还没有完全的绑定到Window上。如果我们想马上播放动画,我们可以在 onWindowFocusChanged()方法里面调用,因为这个方法是在window已经获取到焦点之后回调的,可以保证已经绑定结束。
Property Animatio 属性动画
这个是在Android 3.0中才引进的,属性动画跟补间动画比,可以弥补补间动画的不足,它可以直接改变目标的实际属性(点击区域等),它拥有更强大的属性控制;
相关详情参见
Android 属性动画(Property Animation) 完全解析 (上)