您的位置:首页 > 移动开发 > Android开发

[Android基础]动画xml文件

2015-10-23 20:12 501 查看
参考链接:
http://blog.csdn.net/heavenforgold/article/details/7074136 http://www.cnblogs.com/bavariama/archive/2013/01/29/2881058.html http://blog.csdn.net/airk000/article/details/39164685 http://www.cnblogs.com/mengdd/p/3494041.html
动画xml文件有两种:anim文件夹下的和animator文件夹下的,前者只包含位移、旋转、缩放和透明度四种动画,后者则是属性动画。

当想多个动画混合时,只需将要混合的动画放在set标签内。set有一个属性android:ordering,缺省为together,即同时发生,还可以设置为sequentially依次发生。

1.anim文件夹下的(有translate/rotate/scale/alpha四种动画标签)

例子:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="300"
android:fromXDelta="100%p"
android:toXDelta="0" />

</set>


a.translate动画标签

android:fromXDelta:X轴方向开始位置

android:toXDelta:X轴方向结束位置

android:fromYDelta:Y轴方向开始位置

android:toYDelta:Y轴方向结束位置

上面四种属性的取值范围还包括:-100%p - 100%p





以第一张图为例,当清楚了位置后,我们就可以实现左右滑动的切换效果,首先让要退出的Activity从位置2移动到位置1,同时让进入的Activity从位置3移动位置2,这样就能实现从左右切换效果。

android:interpolator: 加速器,可以取的值如下:

@android:anim/accelerate_interpolator: 越来越快

@android:anim/decelerate_interpolator:越来越慢

@android:anim/accelerate_decelerate_interpolator:先快后慢

@android:anim/anticipate_interpolator: 先后退一小步然后向前加速

@android:anim/overshoot_interpolator:快速到达终点超出一小步然后回到终点

@android:anim/anticipate_overshoot_interpolator:到达终点超出一小步然后回到终点

@android:anim/bounce_interpolator:到达终点产生弹球效果,弹几下回到终点

@android:anim/linear_interpolator:均匀速度。
android:startOffset: 延迟一定时间后运行动画

android:fillAfter:当设置为true时,该动画在动画结束后被应用

b.rotate动画标签

android:fromDegrees

android:toDegrees

当取值为正时,表示顺时针旋转

当取值为负时,表示逆时针旋转

c.scale动画标签 略

d.alpha动画标签 略

如何获取xml中的动画效果:

Animation animation = AnimationUtils.loadAnimation(context, R.anim.fade_zoom_out);


将动画效果应用到view:

public void startAnimation(Animation animation)


将动画效果应用到activity:

public void overridePendingTransition(int enterAnim, int exitAnim)


参数enterAnim和exitAnim都应该是R.anim.xxx的形式。如果没有动画则给0。这个函数需要在如startActivity或finish调用之后进行调用。enterAnim的动画会应用在进来(新)的那个Activity上,exitAnim的动画会应用在离去的Activity上。

将动画效果应用到fragment:

1.

FragmentTransaction.setTransition(int transit)
该方法可传入的三个参数是:

  TRANSIT_NONE,     TRANSIT_FRAGMENT_OPEN,     TRANSIT_FRAGMENT_CLOSE
分别对应无动画、打开形式的动画和关闭形式的动画。设置好后,在Fragment添加和移除的时候都会有。
注意方法必须在add、remove、replace调用之前被设置,否则不起作用

2.

FragmentTransaction.setCustomAnimations(int enter,int exit)
注意方法必须在add、remove、replace调用之前被设置,否则不起作用。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

注意:

如果fragment是v4包的,那么fragment的动画xml文件只能是在res/anim文件夹下,即fragment的动画不能来自res/animator

如果fragment不是v4包的,那么fragment的动画xml文件只能是在res/animator文件夹下,即fragment的动画不能来自res/anim

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

设置动画监听:

public void setAnimationListener(AnimationListener listener)
public static interface AnimationListener {

void onAnimationStart(Animation animation);

void onAnimationEnd(Animation animation);

void onAnimationRepeat(Animation animation);
}


2.animator文件夹下的

例子:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:valueFrom="-1280"
android:valueTo="0"
android:valueType="floatType"
android:propertyName="X"
android:duration="2000"  />

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together">

<!-- android:ordering  together表示同时运行动画,  sequentially 表示按顺序执行以下动画 -->
<set>
<objectAnimator
android:propertyName="rotationX"
android:repeatCount="50"
android:repeatMode="reverse"
android:valueFrom="0"
android:valueTo="20" />
<objectAnimator
android:propertyName="rotationY"
android:repeatCount="50"
android:repeatMode="reverse"
android:valueFrom="0"
android:valueTo="45"
android:valueType="floatType" />
</set>
<set>
<objectAnimator
android:propertyName="scaleX"
android:repeatCount="50"
android:repeatMode="reverse"
android:valueFrom="1.0"
android:valueTo="2.0" >
</objectAnimator>
<objectAnimator
android:propertyName="scaleY"
android:repeatCount="50"
android:repeatMode="reverse"
android:valueFrom="1.0"
android:valueTo="2.0" >
</objectAnimator>
</set>

</set>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动画xml