android基本动画

android的基本动画分为四种:TweenAnimation 变换动画、Frame Animation 帧动画、Layout Animation 布局动画、Property Animation 属性动画。

1.Tween Animation 变换动画

  变换动画又分为四种:Alpha:渐变透明动画、Scale:渐变尺寸缩放动画、Translate:位置移动动画、Rotate:旋转动画

 Tween Animation共同属性:

  (1)Duration:动画持续时间(单位:毫秒)

  (2)fillAfter:设置为true,动画转化在动画结束后被应用

  (3)fillBefore:设置为true,动画转化在动画开始前被应用

  (4)interpolator:动画插入器(加速、减速插入器)

  (5)repeatCount:动画重复次数

  (6)repateMode:顺序重复/倒序重复

  (7)startOffset:动画之间的时间间隔

 Animation实现方式:

 (1)配置文件(/res/anim)---alpha、scale、translate、rotate

 (2)java代码实现---AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation

 

 a.Alpha:渐变透明动画

   (1)fromAlpha:动画起始时透明度 (0.0表示完全透明,1.0表示完全不透明)

   (2)toAlpha:动画终止时的透明度

 

 b.Scale:渐变尺寸缩放动画

   (1)fromX,toX分别是起始和结束x坐标上的伸缩尺寸

   (2)fromY,toY分别是起始和结束y坐标上的伸缩尺寸

   (3)pivotX,pivotY分别为伸缩动画相对于x,y坐标开始的位置

 

 c.Translate:位置移动动画

   (1)fromXDelta,fromYDelta分别是起始时x,y的坐标

   (2)toXDelta,toYDelta分别是结束时x,y的坐标

 

 d.Rotate:旋转动画

   (1)fromDegrees起始的角度

   (2)toDegrees终止的角度

   (3)pivotX,pivotY分别为旋转动画相对于x,y的坐标开始的位置

 

 e.Set:组合动画

   (1)案例一:两个动画A和B,先播放A并设置A的AnimationListener,当onAnimationEnd触发(即A播放完毕时),播放B

       代码如下:

       loadAnimation = AnimationUtils

                                               .loadAnimation(this,R.anim.translate);

                            image.startAnimation(loadAnimation);

                            finalAnimation loadAnimation2 = AnimationUtils.loadAnimation(this,

                                               R.anim.rotate);

                            loadAnimation.setAnimationListener(newAnimationListener() {

 

                                     @Override

                                     publicvoid onAnimationStart(Animation arg0) {

                                               //TODO Auto-generated method stub

 

                                     }

 

                                     @Override

                                     publicvoid onAnimationRepeat(Animation arg0) {

                                               //TODO Auto-generated method stub

 

                                     }

 

                                     @Override

                                     publicvoid onAnimationEnd(Animation arg0) {

                                               //TODO Auto-generated method stub

                                               image.startAnimation(loadAnimation2);

                                     }

                            });

 

      translate.xml文件:

      <?xml version="1.0" encoding="utf-8"?>

<setxmlns:android="http://schemas.android.com/apk/res/android" >

 

           <translate

              android:duration="1000"

              android:fromXDelta="10"

              android:fromYDelta="10"

              android:toXDelta="100"

              android:toYDelta="100" />

</set>

 

rotate.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

 

    <rotate

       android:duration="1000"

       android:fromDegrees="0"

       android:interpolator="@android:anim/accelerate_decelerate_interpolator"

       android:pivotX="50%"

       android:pivotY="50%"

        android:toDegrees="+360"/>

</set>

   (2)案例二:一个动画集AnimationSet,在其中定义动画A和B,为动画B设置startOffset,其值就是前一个动画播放的所需的时间。

       代码如下:

       loadAnimation = AnimationUtils.loadAnimation(this,

                                               R.anim.continue_anim);

                            image.startAnimation(loadAnimation);

 

        continue_anim.xml文件如下:

       <?xml version="1.0" encoding="utf-8"?>

<setxmlns:android="http://schemas.android.com/apk/res/android" >

 

            <alpha

               android:duration="3000"

               android:fromAlpha="0.2"

               android:toAlpha="1.0"/>

            <alpha

               android:duration="3000"

               android:fromAlpha="1.0"

               android:startOffset="3000"

               android:toAlpha="0.2" />

</set>

 

   (3)案例三(循环闪烁):利用Animation的setRepeatCount、setRepeatMode来实现动画循环。

       代码如下:

       AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);

                            alphaAnimation.setDuration(100);

                            alphaAnimation.setRepeatCount(10);

                            //倒序重复REVERSE  正序重复RESTART

                            alphaAnimation.setRepeatMode(Animation.REVERSE);

                            image.startAnimation(alphaAnimation);

 

   (4)案例四(Activity切换动画):使用overridePendingTransition方法。参数:第二个activity进入动画,第一个activity退出时的动画

      代码如下:

      Intent intent=new Intent(MainActivity.this,MainActivity2.class);

                            startActivity(intent);

                            overridePendingTransition(R.anim.zoom_in,R.anim.zoom_out);

      

      zoom_in.xml文件如下:

      <?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"

           android:interpolator="@android:anim/decelerate_interpolator">

 

              <scale

                 android:duration="1000"

                 android:fromXScale="0.1"

                 android:fromYScale="0.1"

                 android:pivotX="50%"

                 android:pivotY="50%"

                 android:toXScale="1.0"

                 android:toYScale="1.0"/>

              <alpha

                 android:duration="1000"

                 android:fromAlpha="0"

                 android:toAlpha="1.0"/>

</set>

 

Zoom_out.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"

   android:interpolator="@android:anim/decelerate_interpolator"

   android:zAdjustment="top" >

 

    <scale

       android:duration="@android:integer/config_mediumAnimTime"

       android:fromXScale="1.0"

        android:fromYScale="1.0"

       android:pivotX="50%p"

       android:pivotY="50%p"

       android:toXScale="0.1"

       android:toYScale="0.1" />

 

    <alpha

       android:duration="@android:integer/config_mediumAnimTime"

       android:fromAlpha="1.0"

        android:toAlpha="0"/>

 

</set>

 

 

2.Frame Animation 帧动画

  使用annimation-list标签来分组一个item标签集合,定义要显示的图片,指定显示它的时间(以毫秒为单位)。

  代码为:

  image.setImageResource(R.drawable.anim_list);

 

 anim_list.xml文件如下:

  <?xmlversion="1.0" encoding="utf-8"?>

<animation-listxmlns:android="http://schemas.android.com/apk/res/android" >

 

   <item

       android:drawable="@drawable/one"

       android:duration="500"/>

   <item

       android:drawable="@drawable/two"

       android:duration="500"/>

   <item

       android:drawable="@drawable/three"

       android:duration="500"/>

   <item

       android:drawable="@drawable/four"

       android:duration="500"/>

   <item

       android:drawable="@drawable/five"

       android:duration="500"/>

   <item

       android:drawable="@drawable/six"

       android:duration="500"/>

 

</animation-list>

3.Layout Animation 布局动画

  为View Grops添加动画,使用LayoutAnimationController

  代码如下:

  publicclass ListActivity extends Activity{

        

         privateListView listView;

         @Override

         protectedvoid onCreate(Bundle savedInstanceState) {

                   //TODO Auto-generated method stub

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.list_layout);

                   listView=(ListView)findViewById(R.id.listView);

                   List<String>list=newArrayList<String>();

                   for(inti=0;i<20;i++)

                   {

                            list.add("XXX"+i);

                   }

                   ArrayAdapter<String>adapter=newArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);

             listView.setAdapter(adapter);

             LayoutAnimationController lac=newLayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.zoom_in));

            lac.setOrder(LayoutAnimationController.ORDER_NORMAL);

             listView.setLayoutAnimation(lac);

             listView.startLayoutAnimation();

         }

}

 

一个使用布局动画的Demo: http://download.csdn.net/detail/qq_26323183/8763797

 

Demo下载地址:http://download.csdn.net/detail/qq_26323183/8763763

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值