Animation android动画

来源:互联网 发布:自动发卡源码正版 编辑:程序博客网 时间:2024/06/06 12:30

View动画

view动画有四种动画

平移动画 \Translate /> TranslateAnimation

旋转动画 Rotate /> RotateAnimation

透明度动画 Alpha /> AlphaAnimation

缩放动画 Scale /> ScaleAnimation

动画集合 Set /> AnimationSet

>

    <?xml version="1.0" encoding="utf-8"?>        <set xmlns:android="http://schemas.android.com/apk/res/android"//动画集合的差值器      android:interpolator="@android:anim/accelerate_decelerate_interpolator"        android:repeatCount="infinite"        android:repeatMode="reverse"        //表示集合中的动画是否和集合共享同一个差值器。如果集合不指定差值器,那么子元素就需要单独指定所需要的差值器或者是默认值        android:shareInterpolator="true" >        <alpha            android:duration="3000"            android:fromAlpha="0"            //重复次数            0 表示执行一次            1 表示重复执行一次             等待            (infinite) 表示无限次            android:repeatCount="infinite"            //重复方式            reverse 往返循环方式            restart 原点重复方式            android:repeatMode="reverse"            //动画停止后,View是否停留在结束位置 true 停留 false 不停留            android:fillAfter = "true"            android:toAlpha="1" />        <rotate            android:duration="3000"            android:fromDegrees="0"            android:pivotX="0.5"            android:pivotY="0.5"            android:repeatCount="infinite"            android:repeatMode="reverse"            android:toDegrees="360"            android:zAdjustment="top" />        <scale            android:duration="3000"            android:fromXScale="0"            android:fromYScale="0"            android:pivotX="0"            android:pivotY="0"            android:repeatCount="infinite"            android:repeatMode="reverse"            android:toXScale="1"            android:toYScale="1" />        <translate            android:duration="3000"            android:fromXDelta="0"            android:fromYDelta="0"            android:repeatCount="infinite"            android:repeatMode="reverse"            android:toXDelta="100%p"            android:toYDelta="100%p" />    </set>

使用动画

        final TextView tv = (TextView) findViewById(R.id.tv);            AnimationSet as= (AnimationSet) AnimationUtils.loadAnimation(this, R.anim.animaiton_set_anim);        //设置动画监听         as.setAnimationListener(new AnimationListener() {            @Override            public void onAnimationStart(Animation animation) {                // TODO Auto-generated method stub                tv.setText("start");            }            @Override            public void onAnimationRepeat(Animation animation) {                // TODO Auto-generated method stub            tv.setText("repeat");               }            @Override            public void onAnimationEnd(Animation animation) {                // TODO Auto-generated method stub                tv.setText("end");            }        });        //启动动画        tv.setAnimation(as);        as.start();

帧动画

帧动画是顺序播放预先定义好的一组图片,不同与View动画,系统提供了另一个类AnimationDrawable来使用帧动画。
帧动画使用起来比较简单

  • 1.首先在xml中定义一个animationDrawable
    <?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android">    <item        android:drawable="@mipmap/sleep_01"        android:duration="500"></item>    <item        android:drawable="@mipmap/sleep_02"        android:duration="500"></item></animation-list>
  • 2.然后将上述的Drawable作为View的背景并通过Drawable来播放动画即可:
   ImageView iv = (ImageView) findViewById(R.id.iv);   iv.setBackgroundResource(R.drawable.animation_drawable);   AnimationDrawable ad = (AnimationDrawable) iv.getBackground();   ad.start();

NOTE:帧动画使用比较简单,但是比较容易引起OOM,所以在使用帧动画时,应尽量避免使用过多较大的图片

View动画的特殊使用场景

1.在ViewGroup中可以控制子元素的出场效果
2.在Activity中可以实现不同Activity之间的切换效果

  • 1.LayoutAnimation

    LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,这样当它的子元素出场时都会具有这种动画效果。这种效果常常被用来在ListView上。
    LayoutAnimation也是一个View动画
    为了给ViewGroup的子元素加上出场效果,需要遵循以下步骤。

    • 1.1 定义LayoutAnimation

      <?xml version="1.0" encoding="utf-8"?><layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"    android:delay="0.5"    android:animationOrder="normal"    android:animation="@anim/slide_in_from_right"    ></layoutAnimation>

      android:delay
      `表示子元素开始动画的时间延迟,比如子元素入场动画的时间周期是300ms,那么0.5表示子元素都需要延迟150ms才能播放入场动画。总体来说,第一个字元素延迟150ms,第二个子元素延迟300ms,依次类推。
      android:animationOrder
      表示子元素动画的顺序,有三种选型:normal,reverse和random,其中normal表示顺序显示,即排在前面的子元素先开始播放入场动画;reverse表示逆向显示,即排在后面的子元素先开始播放入场动画;random则是随机播放入场动画
      android:animation
      为子元素指定具体的入场动画

    • 1.2 为子元素制定具体的入场动画

      <?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >    <translate        android:duration="200"        android:fromXDelta="100%p"        android:toXDelta="0" /></set>
    • 1.3 为ViewGroup指定android:layoutAnimation属性。如:android:layoutAnimation= “@anim/anim_layout”.对于ListView来说,这样ListView的item就具有了出场动画了,这种方式适用于所有的VIewGroup.

          ```       <ListView            android:id="@+id/lv_all_contact"            android:layoutAnimation="@anim/contact_list"            android:layout_width="match_parent"            android:layout_height="match_parent">        </ListView>    ```
    • 1.4.除了在XML中指定LayoutAnimation外,还可以通过LayoutAnimationController来实现。如下:

       lv =(ListView)findViewById(R.id.lv_all_contact);                Animation animation = AnimationUtils.loadAnimation(this, R.anim.contact_list);                LayoutAnimationController layoutAnimationController = new LayoutAnimationController(animation);                layoutAnimationController.setDelay(0.5f);                layoutAnimationController.setOrder(LayoutAnimationController.ORDER_NORMAL);                lv.setLayoutAnimation(layoutAnimationController);
  • 2 Activity之间的跳转动画


Activity之间的跳转动画

0 0
原创粉丝点击