1.Tween动画简介:Tween动画主要通过进行图形矩阵变换,camera投影,和透明度变换来实现动画效果。
主要实现有以下四个子类
AlphaAnimation:明暗变换动画
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="2000"
/>
</set>
ScaleAnimation:图像缩放动画
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="0.5"
android:toXScale="1.0"
android:fromYScale="0.5"
android:toYScale="1.0"
android:pivotX="175"
android:pivotY="118"
android:fillAfter="false"
android:duration="500" />
</set>
TranslateAnimation:移动动画
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="10"
android:toXDelta="100"
android:fromYDelta="10"
android:toYDelta="100"
android:duration="1000"
/>
</set>
RotateAnimation:旋转动画
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="+360"
android:pivotX="350"
android:pivotY="235"
android:duration="1000" />
</set>
2.属性说明
android:duration="2000"//动画时长,毫秒
android:fromAlpha="0.1"//开始透明度
android:toAlpha="1.0"//结束透明度
android:fromXScale="0.5"//坐标x开始比例
android:toXScale="1.0"//坐标x结束比例
android:fromYScale="0.5"//坐标y开始比例
android:toYScale="1.0"//坐标y结束比例
android:pivotX="175"//坐标轴心,在旋转和缩放使用该属性
android:pivotY="118"
android:fromXDelta="10"//位移动画x和y坐标开始和结束点
android:toXDelta="100"
android:fromYDelta="10"
android:toYDelta="100"
android:fillAfter="false"//是否把view放在结束位置
android:interpolator//指定动画插入器,常见动画插入器:
accelerate_decelerate_interpolator
加速-减速 动画插入器
accelerate_interpolator
加速-动画插入器
decelerate_interpolator
减速- 动画插入器
其他的属于特定的动画效果
3.效果组合,可以在配置文件中组合各种动画,透明度变化和旋转变化组合如下:
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="2000" />
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="+360"
android:pivotX="350"
android:pivotY="235"
android:duration="2000" />
</set>
4.使用动画
1.新建Animation对象,可查看不同Animation类的构造函数,新建,并设置相关值,如动画时长
2.通过布局文件构造动画:animaTemp = AnimationUtils.loadAnimation(context, R.anim.push_up_out_not_alpha);布局文件如我前面给的例子
3.开始动画:View.startAnimation可以开始一个view的动画
5.动画原理,理解动画的原理先要理解android view的树形结构,android中的每个view都是建立在父view上的除了activity的rootview外,每个view在调用完自己的draw方法后,会调用dispatchDraw通知调用子view的绘制,Animation就是通过设定绘制子view不断变化的坐标位置,view大小,透明度等,并且在动画时间内不断重复绘制子view,实现动画效果,view的透明度变化是通过设置alpha值,而图像变化是通过animation的变换矩阵实现的,Animation.getMatrix可获取动画的变换矩阵,对变换矩阵进行变换,就可以达到动画效果。
6.自定义Tween动画,有时候需要实现一些特殊的效果,上面四种动画都不能够实现,就需要自定义Animation类,实现applyTransformation方法,对alpha值进行设置,和对变换矩阵进行变化,
7.投影变换,getMatrix获取的Matrix矩阵只能够进行缩放,xy移动旋转,不能够进行3d效果的一些变换,要实现3d效果的变换,就需要使用Camera类对矩阵进行3d投影变换,如z轴平移,x,y,z轴旋转。
如apidemos中Rotate3dAnimation进行y轴旋转变化:
final Camera camera = mCamera;
final Matrix matrix = t.getMatrix();
camera.save();
if (mReverse) {
camera.translate(0, degrees,0f);
} else {
camera.translate(0, degrees, 0f);
}
camera.getMatrix(matrix);
camera.restore();
8.动画顺序组合,有时候需要先后多个动画实现效果,如Rotate3dAnimation中画面的3d旋转,旋转到90度的时候需要切换动画这个时候就需要进行动画顺序组合,这个是通过动画生命周期监听器来实现的,该监听器需要实现接口Animation.AnimationListener,Animation通过调用方法setAnimationListener设置监听器:
private final class DisplayNextView implements Animation.AnimationListener {
private final int mPosition;
private DisplayNextView(int position) {
mPosition = position;
}
public void onAnimationStart(Animation animation) {
//动画开始
}
public void onAnimationEnd(Animation animation) {
//动画结束
mContainer.post(new SwapViews(mPosition));
}
public void onAnimationRepeat(Animation animation) {
//动画重复播放时
}
}