Android View动画的特殊使用场景

    View动画会有一些特殊的场景使用。比如,ListeView可以控制子控件的出场效果,在Activity中可以实现不同的Activity之间切换效果。

    一:LayoutAnimation

    LayoutAnimation作用于ViewGroup,为ViewGroup制定一个动画,这样当它的子元素出场时都会具有这样动画效果。这种效果常常被用在ListView上,使用LayoutAnimation之后ListView它的每个item都会以一定的动画形式出现。添加的步骤如下:

    1:在Listview 的控件中添加LayoutAnimation           

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layoutAnimation="@anim/anim_layout"
        android:background="#fff4f7f9"
       />  

     2:定义LayoutAnimation

      路径:res/anim/anim_layout.xml 

     <layoutAnimation
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:delay="0.5"
        android:animationOrder="normal"
        android:animation="@anim/anim_item"
      />

    android:delay 表示子元素开始动画的时间延时

    android:animationOrder 表示子元素动画的顺序,有三种:nomal,reverse和random,其中nomal表示顺序显示,即排在前面的子元素先开始播放入场动画;reverse表示逆向显示,即排在后面的子元素先开始播放入场动画;random则是随机播放入场动画。

    android:animation 为子元素制定具体的入场动画。

    3:为子元素指定入场动画

      /res/anim/anim_item.xml     

     <?xml version="1.0" encoding="utf-8"?>
          <set xmlns:android="http://schemas.android.com/apk/res/android"
            android:duration="300"
            android:interpolator="@android:anim/linear_interpolator"
             android:shareInterpolator="true">
          <alpha
             android:fromAlpha="0.0"
             android:toAlpha="1.0"
             />
        
           <translate
              android:fromXDelta="500"
              android:toXDelta="0"
             />
          
        </set>   

    **注意:除了在XML中指定LayoutAnimation外,还可以通过LayoutAnimationController来实现,具体代码如下:  
     ListView listview = (ListView) layout.findviewById(R.id.list);

     Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item);

     LayoutAnimationController controller = new LayoutAnimationController(animation);

     controller.setDelay(0.5f);

     controller.setOrder(LayoutAnimationController.ORDER_NORMAL);

     listView.setLayoutAnimation(controller); 

    二:Activity的切换效果

   Activity有默认的切换效果,但是这个效果我们可以定义。主要用到overridePendingTransition(int enterAnim,int exitAnim);这个方法,这个方法必须在startActivity(intent)或者finish()之后被调用才能生效,它的参数含义:

     enterAnim-----Activity 被打开 时,所需要的动画资源id

     exitAnim-------Activity被暂停时,所需要的动画资源id

    当启动一个Activity时,可以按照如下方式为其添加自定义切换效果。  

            Intent intent = new Intent(this,secondActivity.class);
            startActivity(intent);
            overridePendingTransition(R.anim.anim_item, R.anim.anim_item);

    当Activity退出时,也可以为其指定自己的切换效果   

          @Override

          public void finish(){

              super.finish();

            overridePendingTransition(R.anim.anim_item, R.anim.anim_item);

           }
   需要注意的是这个方法必须在startActivity(intent)或者finish()之后被调用才能生效。

   Fragment也可以添加切换动画,由于Fragment是在API11中新引入的类,因此为了兼容性,我们需要使用suppert-v4这个兼容包,在这种情况下我们可以通过FragmentTransaction中的setCustomAnimations()方法来添加切换动画。这个切换动画需要是View动画!


  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值