Android動畫學習

動畫的使用會使我們應用的交互性更友好,Android提供了三種動畫,分別是:View動畫、幀動畫以及屬性動畫。①View動畫是通過對某個對象不斷地做圖像變換(支持四種變換:平移、縮放、旋轉、透明度)從而產生動畫效果。②幀動畫通過順序播放一系列圖像從而產生動畫效果,相當於放電影一幀一幀的播放。③屬性動畫是API 11引入的新特性,功能更加強大,在低版本中無法使用,當然可以使用兼容庫來使用它。

一、View動畫

View動畫支持平移動畫、縮放動畫、旋轉動畫和透明度動畫四種,這四種動畫對應着Animation 的四個子類:TranslateAnimation、ScaleAnimation、RotateAnimation和AlphaAnimation,它們對應的xml標籤是<translate>、<scale>、<rotate>和<alpha>,主要使用參數如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:shareInterpolator="true">
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:fromYScale="float"
        android:pivotX="float"
        android:pivotY="float"
        android:toXScale="float"
        android:toYScale="float" />
    <translate
        android:fromXDelta="float"
        android:fromYDelta="float"
        android:toXDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:pivotX="float"
        android:pivotY="float"
        android:toDegrees="float" />
</set>

View動畫可以是單個動畫也可以是由一系列動畫組成,<set>表示動畫集合。

android:fromAlpha="float"    表示開始透明度
android:toAlpha="float"

android:fromXScale="float"    X軸縮放起始值
android:fromYScale="float"    Y軸方向起始值 
android:pivotX="float"             縮放中心點x座標
android:pivotY="float"            縮放中心點Y座標
android:toXScale="float"        X軸結束值
android:toYScale="float"       Y軸結束值

android:fromXDelta="float"     X起始值  
android:fromYDelta="float"
     Y起始值   
android:toXDelta="float"
         X結束值  
android:toYDelta="float"  
      Y結束值

android:fromDegrees="float"       旋轉開始的角度
android:pivotX="float"              旋轉中心X座標
android:pivotY="float"              旋轉中心Y座標
android:toDegrees="float"      旋轉結束的角度

android:interpolator="@android:anim/accelerate_decelerate_interpolator“    設置動畫的差值器 
android:shareInterpolator="true"
                           表示該動畫集合是否共享一個差值器

除了以上這些主要屬性外,還有duration:表示動畫持續時間,fillAfter:表示動畫結束以後是否停留在動畫結束位置等等。

注意這幾個的取值問題:

fromXScale/fromYScale:起始的X(Y)方向上相對自身的縮放比例,浮點值,比如1.0代表無變化,0.5表示爲自身的0.5倍,2.0表示自身的兩倍。

pivotX/pivotY:縮放起點X(Y)軸座標,取值可以是具體數值,百分數,百分數p這三種形式。例如:100表示相對當前view的左上角加上100px作爲起始點,50%表示在當前控件的左上角加上自己寬度的50%作爲起始點,50&p表示在當前view的左上角加上父控件的寬度的50%作爲起始點。

fromXDelta/fromYDelta:取值類型與pivotX/pivotY相同。

       如何使用View動畫:

1、使用XML文件:

①#scale_anim

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromXScale="0.3"
    android:fromYScale="0.3"
    android:repeatCount="infinite"
    android:repeatMode="restart"
    android:pivotY="50%"
    android:pivotX="50%"
    android:interpolator="@android:anim/linear_interpolator"
    android:toXScale="1"
    android:toYScale="1.6" />
②#translate_anim

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromXDelta="-100%"
    android:fromYDelta="-100%"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:toXDelta="0"
    android:toYDelta="0"/>
③#rotate_anim

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:repeatCount="infinite"
    android:fromDegrees="0"
    android:duration="2000"
    android:repeatMode="reverse"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" />
④#alpha_anim

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromAlpha="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:toAlpha="0.7" />

在java代碼中使用類AnimationUtils的靜態方法loadAnimation加載動畫,調用view的startAnimation方法播放動畫,當然這些動畫可以使用<set>標籤進行組合來達到其他效果。

Animation animation = AnimationUtils.loadAnimation(getContext(),R.anim.alpha_anim);
        button.startAnimation(animation);

2、通過代碼來應用:

例如:

AlphaAnimation alphaAnimation = new AlphaAnimation(0.3f,1);
        alphaAnimation.setDuration(1000);
        button.startAnimation(alphaAnimation);


注意:View動畫是對View的影像做動畫,並不是真正的改變view的狀態,因此有的時候會出現動畫完成後View無法隱藏的現象,就是說setVisibility(View.GONE)方法不起總用,此時只需要調用view.clearAnimation()方法清除View動畫就可以解決這個問題了。

二、幀動畫

幀動畫表示順序播放一組預先定義好的圖片,類似電影播放,系統提供了AnimationDrawable來使用幀動畫。幀動畫的使用比較簡單,首先通過XML文件來定義一個AnimationDrawable,例如:

drawable/frame_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@mipmap/a" android:duration="300"/>
    <item android:drawable="@mipmap/b" android:duration="300"/>
    <item android:drawable="@mipmap/c" android:duration="300"/>
</animation-list>
<pre name="code" class="html">android:oneshot  爲true表示動畫只播放一次,爲false表示一直播放


animation_view.clearAnimation();
animation_view.setBackgroundResource(R.drawable.frame_anim);
AnimationDrawable drawable = (AnimationDrawable)animation_view.getBackground();
drawable.start();
幀動畫在使用時要注意使用的圖片不要太大否則可能會引起OOM異常。



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