Android 补间动画

1,193 阅读1分钟

前言

补间动画,设置动画初始与结束状态,中间状态由系统计算并控制。Animation是抽象类,它的子类实现动画的具体行为和效果,动画帧的显示与视图关联。四种补间动画类型,平移,旋转,透明度,缩放。补间动画只是改变了View的显示效果,并没有真正改变View的属性。

作用对象

视图控件(View)如Android的TextView、Button等等,不可作用于View组件的属性,如:颜色、背景、长度等等

原理

分类

名称 对应子类
平移动画 android.view.animation.TranslateAnimation
放大缩小动画 android.view.animation.ScaleAnimation
旋转动画 android.view.animation.RotateAnimation
透明动画 android.view.animation.AlphaAnimation
动画组 android.view.animation.AnimationSet

具体使用

下面分别介绍平移动画、3D翻转动画、动画组的具体实现方式.

1. 平移动画

TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta,float toYDelta)

case R.id.translateAnimationBtn:
 	view = findViewById(R.id.image);
	Animation translateAnimation = new TranslateAnimation(0,500,0,0);
	translateAnimation.setDuration(2000);
	translateAnimation.setFillAfter(true);//设置是否保持动画最后状态
	view.startAnimation(translateAnimation);
	break;

2. 3D旋转动画

3D旋转需要使用到Camera和Matrix,camera的处理对象是matrix,将处理后的matrix应用在图片上,就会让一个平铺在屏幕上的图片产生绕x轴或者y轴旋转过后的3D效果了。参考google官方案例

调用方式:

final float centerX = view.getWidth() / 2.0f;
final float centerY = view.getHeight() / 2.0f;
final Rotate3dAnimation rotation = new Rotate3dAnimation(0, 180, centerX, centerY, 1.0f, true);
rotation.setDuration(1500);
rotation.setFillAfter(true);
rotation.setInterpolator(new AccelerateInterpolator());
view.startAnimation(rotation);

3. 组合动画

case R.id.groupAnimationBtn:
	AnimationSet setAnimation = new AnimationSet(true);
	setAnimation.setRepeatMode(Animation.RESTART);
	setAnimation.setRepeatCount(1);
	//子动画1
	Animation translateAnimation1 = new TranslateAnimation(0,500,0,0);
	translateAnimation1.setDuration(2000);
	translateAnimation1.setFillAfter(true);
	//子动画2
	Animation alphaAnimation1 = new AlphaAnimation(1,0);
	alphaAnimation1.setDuration(2000);
	//组合
	setAnimation.addAnimation(translateAnimation1);
	setAnimation.addAnimation(alphaAnimation1);
	view.startAnimation(setAnimation);
	break;

代码

Github demo code