Android动画

Android 平台提供了两类动画。

一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。

第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。

实现动画有两种方式:一种使用XML文件(文件放在res/anim),一种直接代码搞定

 1、透明度控制动画效果alpha

<!--

透明度控制动画效果alpha

     浮点型值:

     fromAlpha  动画起始时透明度

     toAlpha    动画结束时透明度

     说明:0.0  完全透明

     1.0  完全不透明

     以上值取0.0-1.0之间的 float数据类型的数字

duration  为动画持续时间

长整型:

说明:时间以毫秒为单位

-->

<alpha

    android:duration="3000"

    android:fromAlpha="0.0"

    android:toAlpha="1.0" />

代码方式:

Animation animationAlpha = new AlphaAnimation(0.0f, 1.0f);

animationAlpha.setDuration(3000);

ivAnim.startAnimation(animationAlpha);

 

2、rotate旋转动画

<!--

rotate旋转动画效果



属性:interpolator 指定一个动画的插入器

有三种动画插入器:

  accelerate_decelerate_interpolator  加速-减速 动画插入器

  accelerate_interpolator 加速-动画插入器

  decelerate_interpolator 减速-动画插入器

 其他的属于特定的动画效果



浮点整型值:

    fromDegrees 为动画起始时物件的角度

    toDegrees 为动画起始时物件旋转的角度 可以大于360度

说明:当角度为负数——表示逆时针旋转

            当角度为正数——表示顺时针旋转

           (负数from——to正数:顺时针旋转

                负数from——to负数:逆时针旋转

                正数from——to正数:顺时针旋转)

                

pivotX 为动画相对于物件的X坐标的开始位置

pivotY 为动画相对于物件的Y坐标的开始位置

说明:以上两个属性值 从0%——100%中取值

  50%为物件的X或Y方向坐标上的中点位置

长整型类型:

duration  为动画持续时间

说明:时间以毫秒为单位

    -->



<rotate

    android:duration="3000"

    android:fromDegrees="0"

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

    android:pivotX="50%"

    android:pivotY="50%"

    android:toDegrees="+350" />

代码方式:

Animation animationRotate = new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

animationRotate.setDuration(3000);

ivAnim.startAnimation(animationRotate);

 

3、尺寸伸缩动画效果 scale

<!--

尺寸伸缩动画效果 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%中取值

   长整型:

   duration 动画持续时间

   说明:时间以毫秒为单位

   布尔型值:

   fillAfter 当设置为true,该动画转化在动画结束后被应用

-->



<scale

    android:duration="700"

    android:fillAfter="false"

    android:fromXScale="0.0"

    android:fromYScale="0.0"

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

    android:pivotX="50%"

    android:pivotY="50%"

    android:toXScale="1.4"

    android:toYScale="1.4" />

代码方式:

Animation animationScale = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

animationScale.setDuration(3000);

ivAnim.startAnimation(animationScale);

 

4、translate 位置转移动画效果

<!--

translate 位置转移动画效果

       整型值:

       fromXDelta 动画起始时 X坐标上的位置 

    toXDelta 动画结束时 X坐标上的位置

    fromYDelta 动画起始时 Y坐标上的位置

    toYDlta 动画结束时 Y坐标上的位置

     注意:没有指定fromXTra toXType fromYType toYType 时候,默认是以自己为相对参照物

     长整型:duration 为动画持续时间

                         时间以毫秒为单位

-->



<translate

    android:duration="2000"

    android:fromXDelta="30"

    android:fromYDelta="30"

    android:toXDelta="-80"

    android:toYDelta="300" />

代码方式:

Animation animationTranslate = new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);

animationTranslate.setDuration(3000);

ivAnim.startAnimation(animationTranslate);

 

xml文件方式使用的话就两行代码

Animation anim = AnimationUtils.loadAnimation(activity, R.anim.anim_xxx);

ivAnim.startAnimation(anim);

 

5、frame帧动画(文件放在res/drawable)

<!--

        根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画  

        根标签下,通过item标签对动画中的每一个图片进行声明  

        android:duration 表示展示所用的该图片的时间长度  



-->

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="true" >



    <item

        android:drawable="@drawable/icon_frame1"

        android:duration="200">

    </item>

    <item

        android:drawable="@drawable/icon_frame2"

        android:duration="200">

    </item>

    <item

        android:drawable="@drawable/icon_frame3"

        android:duration="200">

    </item>

    <item

        android:drawable="@drawable/icon_frame4"

        android:duration="200">

    </item>

    <item

        android:drawable="@drawable/icon_frame5"

        android:duration="200">

    </item>

    <item

        android:drawable="@drawable/icon_frame6"

        android:duration="50">

    </item>



</animation-list>

xml帧动画使用代码:

ivFrame = (ImageView) findViewById(R.id.iv_frame_image);

ivFrame.setImageResource(R.drawable.anim_frame); 

animation = (AnimationDrawable) ivFrame.getDrawable();

animation.setOneShot(false);//循环

animation.start();

 

你可能感兴趣的:(android)