动画学习 三

来源:互联网 发布:js获取页面停留时间 编辑:程序博客网 时间:2024/06/05 08:43

5.0以前的动画(Animation Resources方面)

包含以下两大类型:

属性动画(Property Animation)

使用Animator来创建,通过修改对象随时间变化的属性值来创建动画。

View动画View Animation)

使用animation框架,包含两种类型的动画:

补间动画(Tween animation):通过使用Animation对单一图片进行一系列变化(旋转,移动,放大缩小等)来生成动画

帧动画(Frame animation):通过使用AnimationDrawable顺序显示一系列图片来生成动画


以下介绍如何在资源文件中定义上述动画:

一)属性动画(Property Animation)

      文件位置:res/animator/filename.xml

      可编译的资源数据类型:

      可以使用ValueAnimatorObjectAnimator, 或 AnimatorSet类来指向该资源。

      如何使用该资源:

      In Java: R.animator.filename

      In XML: @[package:]animator/filename

      语法:

<set
  android:ordering=["together" |"sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float|int |color"
        android:valueTo="float|int |color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" |"reverse"]
        android:valueType=["intType" |"floatType"]/>  //如果值是颜色时不需要指定该属性,animation框架会自动处理颜色值。

    <animator
        android:duration="int"
        android:valueFrom="float|int |color"
        android:valueTo="float|int |color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" |"reverse"]
        android:valueType=["intType" |"floatType"]/>

    <set>
        ...
    </set>
</set>

例子如下:

res/animator/property_animator.xml:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>


在代码中这样使用:

AnimatorSet set = (AnimatorSet)AnimatorInflator.loadAnimator(myContext, R.anim.property_animator);

set.setTarget(myObject);

set.start();



二)View动画View Animation)


补间动画(Tween animation)

      文件位置:res/anim/filename.xml

      可编译的资源数据类型:

                可以使用Animation类来指向该资源。

      如何使用该资源:

            In Java: R.anim.filename

            In XML: @[package:]anim/filename

     语法:

<?xmlversion="1.0" encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" |"false"]>
    <alpha    //对应AlphaAnimation
        android:fromAlpha="float"
        android:toAlpha="float"/>
    <scale   //对应ScalAnimation
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float"/>
    <translate   //对应TranslateAnimation
        android:fromXDelta="float"    //5:像素绝对值,%5:想到自身的百分比,%5p:相对父类尺寸的百分比
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float"/>
    <rotate      //对应RotateAnimation
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float"/>
    <set>
        ...
    </set>
</set>

该文件必须有一个如下其中之一的根元素:<alpha><scale><translate><rotate>, 或<set>(包含一组动画,可嵌套) 。

例子如下:

res/anim/hyperspace_jump.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700"/>
    <set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400"/>
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400"/>
    </set>
</set>

在代码中这样使用:

ImageView image = (ImageView) findViewById(R.id.imageview1);

Animation hyperspaceJump = AnimationUtils.loadAnimation(this,R.anim.hyperspace_jump);

image.startAnimation(hyperspaceJump);


三)Interpolator

5.o以前的Interpolator

Interpolator class

Resource ID

AccelerateDecelerateInterpolator

@android:anim/accelerate_decelerate_interpolator

AccelerateInterpolator

@android:anim/accelerate_interpolator

AnticipateInterpolator

@android:anim/anticipate_interpolator

AnticipateOvershootInterpolator

@android:anim/anticipate_overshoot_interpolator

BounceInterpolator

@android:anim/bounce_interpolator

CycleInterpolator

@android:anim/cycle_interpolator

DecelerateInterpolator

@android:anim/decelerate_interpolator

LinearInterpolator

@android:anim/linear_interpolator

OvershootInterpolator

@android:anim/overshoot_interpolator

可以通过设置 android:interpolator属性来使用上述Interpolator:

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>

如何自定义Interpolator 

需要使用XML文件创建自己的,如可以修改AnticipateInterpolator的加速速率,或修改CycleInterpolator的循环次数。

       文件位置:res/anim/filename.xml

      可编译的资源数据类型:

      可以使用相应的interpolator类(见上表)来指向该资源。

      如何使用该资源: 

                In XML: @[package:]anim/filename

      语法:

SYNTAX:

<?xmlversion="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

解释几个用到的属性:

android:factor  加速或减速速率,默认值为1,在<accelerateInterpolator>和<decelerateInterpolator>中用到。

android:tension 

 效果应用的强度,默认值为2,在<anticipateInterpolator>,<overshootInterpolator>和<anticipateOvershootInterpolator>中用到。

  <anticipateInterpolator>是这样的动画效果:先向后然后急伸向前(The change starts backward then flings forward)。

  <overshootInterpolator>是这样的动画效果:向前伸展并超过最后的值,然后反弹回来(The change flings forward and overshoots the last value, then comes back)。当tension为0是没有向后的anticipation和向前的overshoot效果,就变成了一个简单的acceleration/deceleration插值器.

android:extraTension   在<anticipateOvershootInterpolator>中用到,用来跟tension相乘的, 默认值是1.5。<anticipateOvershootInterpolator>的动画效果是:先向后然后急伸向前并超过最后的值,然后稳定在最后的值上(The change starts backward, flings forward and overshoots the target value, then settles at the final value)。

例子如下:

res/anim/my_overshoot_interpolator.xml:

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

在资源文件中这样使用:

<scalexmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700"/>

四)帧动画(Frame animation)

      文件位置:res/drawable/filename.xml

      可编译的资源数据类型:

      可以使用 AnimationDrawable.来指向该资源。

      如何使用该资源: 

                In Java: R.anim.filename 或 R.drawable.filename
                In XML: @[package:]anim.filename 或 @[package:]drawable.filename

      语法:

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

<animation-listxmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" |"false"] >   //true:只播放一次,fasle:循环播放动画
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer"/>
</animation-list>

例子如下:

 res/anim/rocket.xml:

<?xmlversion="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1"android:duration="200"/>
    <item android:drawable="@drawable/rocket_thrust2"android:duration="200"/>
    <item android:drawable="@drawable/rocket_thrust3"android:duration="200"/>
</animation-list>

在代码中这样使用:

mView3 = (ImageView) findViewById(R.id.imageview3);

mView3.setImageResource(R.anim.rocket);

AnimationDrawable anim = (AnimationDrawable)mView3.getDrawable();

anim.start();

或在资源文件中这样使用: 

     <ImageView android:id="@+id/imageview3"
          android:layout_width="130dp"
          android:layout_height="30dp"
          android:src="@anim/rocket"/>







0 0