Android:View Animition 两种实现方式

在Android中,实现View的Animition有两种方式: 1、在XML文件中定义  2、在代码中实现

方法一:在XML文件中定义Animation(XML文件放置于于 /res/anim文件夹下)

     示例XML代码如下:(文件名:alpha_scale_translate_rotate_anim.xml)

    <?xml version="1.0" encoding="UTF-8"?>   
    <set xmlns:android="http://schemas.android.com/apk/res/android">   
       
        <!--    
            Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效   
               
            Alpha:渐变透明度动画效果   
            Scale:渐变尺寸伸缩动画效果   
            Translate:画面转换位置移动动画效果   
            Rotate:画面旋转动画效果   
               
            Tween Animation 通用属性[类型]    功能     
                Duration[long]  属性为动画持续时间   时间以毫秒为单位   
                fillAfter [boolean] 当设置为true ,该动画转化在动画结束后被应用   
                fillBefore[boolean] 当设置为true ,该动画转化在动画开始前被应用   
                   
                interpolator    指定一个动画的插入器  有一些常见的插入器   
                accelerate_decelerate_interpolator   
                加速-减速 动画插入器   
                accelerate_interpolator   
                加速-动画插入器   
                decelerate_interpolator   
                减速- 动画插入器   
                其他的属于特定的动画效果   
                repeatCount[int]    动画的重复次数    
                RepeatMode[int] 定义重复的行为 1:重新开始  2:plays backward   
                startOffset[long]   动画之间的时间间隔,从上次动画停多少时间开始执行下个动画   
                zAdjustment[int]    定义动画的Z Order的改变 0:保持Z Order不变   
                1:保持在最上层   
                -1:保持在最下层 
         -->   
        <!--   
            透明控制动画    
         -->   
        <alpha   
            android:fromAlpha="0.1"    
            android:toAlpha="1.0"   
            android:duration="3000"   
        />   
               
        <!-- 尺寸伸缩动画效果 scale   
          
            属性:interpolator 指定一个动画的插入器   
       
            有三种动画插入器:   
             accelerate_decelerate_interpolator  加速-减速 动画插入器   
             accelerate_interpolator        加速-动画插入器   
             decelerate_interpolator        减速- 动画插入器   
       
            其他的属于特定的动画效果   
       
                fromXScale 属性为动画起始时 X坐标上的伸缩尺寸       
                toXScale   属性为动画结束时 X坐标上的伸缩尺寸        
       
                fromYScale 属性为动画起始时Y坐标上的伸缩尺寸       
                toYScale   属性为动画结束时Y坐标上的伸缩尺寸       
       
                说明:   
                     以上四种属性值       
                        0.0表示收缩到没有    
                        1.0表示正常无伸缩        
                        值小于1.0表示收缩     
                        值大于1.0表示放大   
                           
                pivotX     属性为动画相对于物件的X坐标的开始位置   
                pivotY     属性为动画相对于物件的Y坐标的开始位置   
                说明:   
                        以上两个属性值 从0%-100%中取值   
                        50%为物件的X或Y方向坐标上的中点位置   
            长整型值:   
                duration  属性为动画持续时间   
                说明:   时间以毫秒为单位   
       
            布尔型值:   
                fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用   
        -->   
        <scale 
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"   
            android:repeatCount="1"   
               
            android:fromXScale="0.5"   
            android:fromYScale="0.5"   
            android:toXScale="1.4"         
            android:toYScale="1.4"   
            android:pivotX="50%"   
            android:pivotY="50%"   
            android:fillAfter="false"   
            android:duration="3000"   
               
        />   
        <!--    
            画面转换位置移动动画效果 translate   
           
            fromXDelta toXDelta 为动画、结束起始时 X坐标上的位置      
            fromYDelta toYDelta 为动画、结束起始时 Y坐标上的位置   
         -->   
     
        <translate   
            android:repeatCount="2"   
            android:fromXDelta="-30"   
            android:fromYDelta="-30"   
            android:toXDelta="-80"         
            android:toYDelta="200"   
            android:duration="3000"   
        />   
        <!--    
            画面转移旋转动画效果 rotate   
               
            fromDegrees 为动画起始时物件的角度 说明   
                当角度为负数——表示逆时针旋转   
                当角度为正数——表示顺时针旋转   
                (负数from——to正数:顺时针旋转)   
                (负数from——to负数:逆时针旋转)   
                (正数from——to正数:顺时针旋转)   
                (正数from——to负数:逆时针旋转)   
                toDegrees   属性为动画结束时物件旋转的角度 可以大于360度   
            pivotX   
            pivotY  为动画相对于物件的X、Y坐标的开始位  说明:以上两个属性值 从0%-100%中取值   
            50%为物件的X或Y方向坐标上的中点位置   
         -->   
        <rotate   
            android:interpolator="@android:anim/accelerate_interpolator"   
            android:repeatCount="2"   
            android:fromDegrees="0"   
            android:toDegrees="+270"   
            android:pivotX="50%"   
            android:pivotY="50%"   
            android:duration="3000"   
        />   
      
    </set>   

调用该动画的代码如下:

      
        btnDemo = (Button) findViewById(R.id.btnDemo);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha_scale_translate_rotate_anim); btnDemo.startAnimation(anim);
//或者:
//       btnDemo .setAnimation(mAnimation);
//        btnDemo.startLayoutAnimation();



几个需要注意的问题:

1、在Anim的XML Attributes中有fillAfter和fillBefore这两个属性,很多人发现在xml文件中设置没有效果。其实不然,首先要将android:fillEnabled设置为true,其次在<set>中设置,如下:

    <set
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:shareInterpolator="false"
       android:fillEnabled="true"
       android:fillAfter="true"  //默认为false,而fillBefore默认值为true
   >

2、对于<set></set>作用的理解:
      凡是在同一个<set>.....</set>中定义的动画效果(如scale、rotate)是同时发生的,如果需要让一个view分段执行某一效果或者某一效果集合,这需要在不同的<set>.....</set>中定义,View会按顺序先后执行。这也就是为什么上面说fillAfter和fillBefore要在<set...>中声明的原因。

3、fillAfter(其作用请看google文档)被设置为true的时候,View在执行动画后,会停在其动画最后一帧的状态下,虽然有时候需要这么做,但是view相应的触摸的位置还是在其执行动画前的位置。这个问题还有待解决!!


方法二:在代码中定义动画

        Animation anim = null;  
        anim = new RotateAnimation(0.0f,+360.0f);  
        anim.setInterpolator(new AccelerateDecelerateInterpolator());  
        anim.setDuration(3000);  

      调用的方式和方法一是一样的






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值