Android動畫筆記

1、動畫分類

1、動畫分爲兩種類型:

1)Property Animation:屬性動畫

通過該修改object的屬性來實現動畫效果,通過Animator類實現;

2)View Animation:視圖動畫,分爲兩種類型:

①Tween animation: 補間動畫,通過在單張圖片進行一系列變換來實現動畫效果,通過Animation類實現;

②Frame animation: 幀動畫,通過順序播放多張圖片來實現動畫效果,通過AnimationDrawable類實現;

2、屬性動畫

1、代碼實現

①Animator類,常用方法有:

addListener():添加監聽器,監聽animation的start,repeat,end,cancel事件;

addPauseListener():添加暫停監聽器,監聽animation的pause事件;

setDuration():設置animation持續的時間;

setInterpolator():設置插值器;

start():開始動畫;

Animator的子類有AnimatorSet,ValueAnimator

②AnimatorSet類:按照一定的順序播放集合中的Animator

playSequentially():創建順序播放的animation

playTogether():創建同時播放animation

setDuration():設置持續的時間

setInterpolator():設置插值器;

start();開始動畫;

2、XML實現

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

資源引用:在java代碼中引用:R.animator.filename

在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"]/>
    <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>
之後,在java代碼中通過以下代碼加載動畫資源:

AnimatorSet set = (AnimatorSet)AnimatorInflater.loadAnimator(myContext,R.anim.property_animator);
set.setTarget(myObject);
set.start();

3、補間動畫

1、代碼實現

ViewAnimation的子類包括:

AlphaAnimation:淡入淡出,改變透明度

RotateAnimation:旋轉

ScaleAnimation:尺寸拉伸

TranslateAnimation:位置移動

AnimationSet

方法舉例:setInterpolator(Interpolator i)、start()、cancel(),參見API。

2、XML實現

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

資源應用:在Java代碼中引用:R.anim.filename

在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
      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:fromXDelta="float"
      android:toXDelta="float"
      android:fromYDelta="float"
      android:toYDelta="float" />
  <rotate
      android:fromDegrees="float"
      android:toDegrees="float"
      android:pivotX="float"
      android:pivotY="float" />
   <set>
      ...
  </set>
</set>

之後,在java代碼中通過以下代碼加載動畫資源:
ImageView image =(ImageView)findViewById(R.id.image);
Animation hyperspaceJump=AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);

4、幀動畫

1、代碼實現

AnimationDrawable類常用方法:

addFrame(Drawable frame, int duration)

getFrame(int index)

start()

inflate(Resources r, XmlPullParserparser,AttributeSet attrs, Resources.Theme theme)

2、XML實現

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

資源引用:在java代碼中引用:R.drawable.filename

在XML文件中引用:@[package:]drawable.filename

語法

<?xmlversion="1.0"encoding="utf-8"?>
<animation-listxmlns: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>
之後,在java代碼中通過以下代碼加載動畫資源:

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

5、插值器Interpolator

插值器是用來控制動畫變化的速度的,可用於屬性動畫,補間動畫。

Android中的插值器都是Intepolator的子類,對每一個插值器類,都有一個公共的資源文件與它對應,您可以在XML文件中通過android:interpolator屬性來引用。

常用的插值器有:AccelerateInterpolator、DecelerateInterpolator、AccelerateDecelerateInterpolator等,參見API。

自定義Intepolator:

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

資源引用:在XML文件中引用: @[package:]anim/filename

語法:

<?xmlversion="1.0"encoding="utf-8"?>
<InterpolatorNamexmlns:android="http://schemas.android.com/apk/res/android"
  android:attribute_name="value"
/>
在標籤內可引用以下標籤進行自定義Intepolator

<accelerateInterpolator>android:factor(動畫加速的速度)

<anticipateInterpolator>android:tension

<decelerateInterpolator>android:factor

6、屬性動畫其他內容

Animator.AnimatorListener

ValueAnimator.AnimatorUpdateListener

TypeEvaluator:屬性動畫的值計算器



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章