Android动画–视图动画
根据《Android群英传》总结
1.AlphaAnimation–透明度动画
AlphaAnimation aa = new AlphaAnimation(0,1);
aa.setDuration(2000);
view.startAnimation(aa);
AlphaAnimation 的参数有两个:
AlphaAnimation(float fromAlpha, float toAlpha)
fromAlpha: 起始的Alpha值
toAlpha:结束的Alpha
数值在0~1之间
2.RoateAnimation–旋转动画
RotateAnimation(float fromDegrees, float toDegrees,
float pivotX, float pivotY)
RotateAnimation rotateAnimation = new RotateAnimation(
0,360,100,100);
rotateAnimation.setDuration(2000);
view.startAnimation(rotateAnimation);
参数分别为旋转的起始角度和旋转中心点的坐标。我们也可以通过设置旋转参考系对动画进行控制:
RotateAnimation(float fromDegrees, float toDegrees,
int pivotXType, float pivotXValue,int pivotYType,
float pivotYValue)
如下所示,设置旋转参考系为自身中心点:
RotateAnimation ra = new RotateAnimation(0,360,
RotateAnimation.RELATIVE_TO_SELF,0.5f,
RotateAnimation.RELATIVE_TO_PARENT,0.5f);
ra.setDuration(2000);
btn_Roate.startAnimation(ra);
3.TranslateAnimation–位移动画
TranslateAnimation ta = new TranslateAnimation(0,200,
0,200);
ta.setDuration(2000);
view.startAnimation(ta);
参数分别为起始点的X坐标和Y坐标。
4.ScaleAnimation–缩放动画
ScaleAnimation sa = new ScaleAnimation(0,2,0,2);
sa.setDuration(2000);
view.startAnimation(sa);
同样可以通过设置参考系设置缩放动画的缩放位置。
参数分别为XY坐标的缩放比例。
5.AnimationSet–动画集合
通过AnimationSet可以将多个动画组合起来使用。
AnimationSet as = new AnimationSet(true);
as.setDuration(2000);
AlphaAnimation alphaAnimationa = new AlphaAnimation(0,1);
alphaAnimationa.setDuration(2000);
as.addAnimation(alphaAnimationa);
RotateAnimation rotateAnimation = new RotateAnimation(0,
360,
RotateAnimation.RELATIVE_TO_SELF,0.5f,
RotateAnimation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setDuration(2000);
as.addAnimation(rotateAnimation);
view.startAnimation(as);
6.通过Xml设置动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<scale
android:fromXScale="1.0"
android:toXScale="0.01"
android:fromYScale="1.0"
android:toYScale="0.01"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:duration="2000"/>
<alpha android:fromAlpha="0"
android:toAlpha="1"
android:duration="2000"/>
<rotate android:fromDegrees="0"
android:toDegrees="200"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"/>
<translate android:fromXDelta="0"
android:toXDelta="100"
android:fromYDelta="0"
android:toYDelta="100"
android:duration="2000"/>
</set>
在代码中使用的时候,通过AnimationUtil进行加载:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim);
view.startAnimation(animation);
7.设置动画监听器
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
通过该监听器可以获取到动画的开始、结束和重复事件,并针对其做出不同的处理。
8.视图动画优缺点分析
通过运行以上代码可以发现,这些动画只是在视觉上产生动画效果,不具备交互性,即动画运行过程中其响应事件的位置还是在动画之前的位置,且动画结束后产生动画的view会回到之前的状态(可以通过animation.setFillAfter(true)保留结束时的状态,但是响应位置还是在动画之前的位置),但是效率比较高且使用方便。