Android Animation学习总结

    技术2022-06-30  119

    在Android中定义了2类animation

       1.Tween Animation(补间动画)

           通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画

       2.Frame  Animation(帧动画)

           顺序播放事先做好的图像,是一种画面转换动画,好比放电影。

     

    以下具体介绍这两类动画

    Tween Animation

     在XML中定义具体的动画 位置为:res/anim/fileName.xml(具体文件名)。

     实际的文件名将被当做resource ID 在java代码 或者其他XML中被引用。

     在XML中基本语法:

     <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@[package:]anim/interpolator_resource" android:shareInterpolator=["true" | "false"] > <alpha android:fromAlpha="float" android:toAlpha="float" /> <scale android:fromXScale="float" android:toXScale="float" android:fromYScale="float" android:toYScale="float" android:pivotX="float" android:pivotY="float" /> <translate android:fromX="float" android:toX="float" android:fromY="float" android:toY="float" /> <rotate android:fromDegrees="float" android:toDegrees="float" android:pivotX="float" android:pivotY="float" /> <set> ... </set> </set>

     

    这个文件必须包含一个根元素,可以是<alpha><scale> <translate> <rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。

     

    <set>

    一个容器 可以包含 (<alpha>, <scale>, <translate>, <rotate>) or other <set> 元素。 在set中设置的属性 (for example, duration or fillBefore), 将覆盖它所包含的类型的设置的同一属性。

    属性:

        android:interpolator

        interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果可以 accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等。

      android 自带的interpolator

     

       AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速

         AccelerateInterpolator  在动画开始的地方速率改变比较慢,然后开始加速

       AnticipateInterpolator 开始的时候向后然后向前甩

       AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值

       BounceInterpolator   动画结束的时候弹起

       CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线

       DecelerateInterpolator 在动画开始的地方快然后慢

         LinearInterpolator   以常量速率改变

         OvershootInterpolator    向前甩一定值后再回到原来位置

    如果android定义的interpolators不符合你的效果也可以自定义interpolators

    例子:

    XML file saved at res/anim/my_overshoot_interpolator.xml:

    <?xml version="1.0" encoding="utf-8"?><overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"    android:tension="7.0"    />

     

    android:shareInterpolator Boolean. "true" if you want to share the same interpolator among all child elements

     

    <alpha> 淡入淡出动画效果

     例子:

      <alpha android:fromAlpha="1.0" //Float表示 起始透明度 0.0 透明 1.0 不透明

                  android:toAlpha="0"       //Float表示 结束透明度 0.0 透明 1.0 不透明              android:duration="@android:integer/config_mediumAnimTime"//动画持续时间

      /> 

     

    <scale>  渐变尺寸伸缩动画效果

    例子:

    <scale android:fromXScale="1.0" android:toXScale=".5"  //动画开始和结束时x坐标上的伸缩尺寸 0.0 表示不伸缩 1.1 表示正常无变化           android:fromYScale="1.0" android:toYScale=".5" //动画开始和结束时y坐标上的伸缩尺寸 0.0 表示不伸缩 1.1 表示正常无变化           android:pivotX="50%p" android:pivotY="50%p" //动画相对于物件的x,y坐标开始位置 取值0%-100%. 50%           android:duration="@android:integer/config_mediumAnimTime" />

      <translate> 水平和/或垂直运动 三种表示格式: 1.-100% 到 100% 相对自身的百分比 2.-100%P到100%P 相对父组件的百分比 3.folat value 没有后缀 表示绝对值

    例子:

       <translate android:fromYDelta="-100%" android:toXDelta="0" android:duration="100" />

     

    <rotate> 旋转动画          <rotate            android:fromDegrees="0" //动画起始角度 负数表示逆时针 正式表示顺时针            android:toDegrees="-45"            android:toYScale="0.0"             android:pivotX="50%"             android:pivotY="50%"            android:duration="400" />

     在应用程序中应用动画

    Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); findViewById(R.id.pw).startAnimation(shake);

    Frame Animation

    语法:

    <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot=["true" | "false"] > <item android:drawable="@[package:]drawable/drawable_resource_name" android:duration="integer" /> </animation-list>

    <animation-list> 必须的 作为根元素 包含 一个或多个<item>

    属性:

    android:oneshot  "true" if you want to perform the animation once; "false" to loop the animation  

    <item> 单独的帧动画

    属性:

    android:drawable

    Drawable resource. The drawable to use for this frame.

    android:duration

    Integer. The duration to show this frame, in milliseconds.

     在应用程序中应用

    ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.setBackgroundResource(R.drawable.rocket_thrust); rocketAnimation = (AnimationDrawable) rocketImage.getBackground(); rocketAnimation.start();

      


    最新回复(0)