[Android基础]动画xml文件

参考链接:

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>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值