星期二, 1月 24, 2012

Animation (六)

Android應用程式學習筆記

Animation Listeners

你可以在動畫期間用以下描述的監聽器監聽重要事件。

  • Animator.AnimatorListener
    • onAinmationStart()-當動畫開始時呼叫。
    • onAnimationEnd()-當動畫停止時呼叫。
    • onAnimationRepeat()-當動畫重複時呼叫。
    • onAnimationCancel()-當動畫被取消掉時呼叫,被取消的動畫也會呼叫onAnimationEnd()方法。
  • ValueAnimator.AnimatorUpdateListener
    • onAnimationUpdate()-動畫中的每個frame都會呼叫。監聽此事件來利用動畫過程中由ValueAnimator產生的數據。getAnimtedValue()方法查詢傳入事件的ValueAnimtor物件取得目前的動畫值,如果你使用ValueAnimator必須實現此監聽器。
    • 根據你動畫的屬性或是物件,你也許需要在一個視圖上呼叫invalidate()方法,強制用新的動畫值重新繪製屏幕。
如果你不想實現Animator.AnimatorListener介面的所有方法,可以繼承AnimatorListenerAdapter被類別取代實現Animator.AnimatorListener介面。AnimatorListenerAdapter提供空的方法,你可以選擇性地複寫。

舉例

ValueAnimatorAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
fadeAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
    balls.remove(((ObjectAnimator)animation).getTarget());
}


Animating Layout Changes to ViewGroups

屬性動畫系統提供一個功能讓動畫的變化變成一個ViewGroup物件,提供了一個對視圖物件動畫的更簡易方法。

你可以用LayoutTransition類別將動畫布局改變成ViewGroup,ViewGroup中的視圖可以透過當你從ViewGroup增加或移除視圖或是當你呼叫視圖的setVisibility()方法設定VISIBLE或GONE來顯現或不顯現動畫,當你新增或移除視圖時,在ViewGroup中的其餘視圖也可以動畫到它們新的位置。你可以藉由呼叫setAnimator在LayoutTransition物件中定義動畫且傳遞以下其中一個LayoutTransition常數到Animator物件。

  • APPEARING - 表示運行在動畫上的項目顯示在容器中的標籤。
  • CHNAGE_APPEARING - 表示運行在動畫上的項目由於容器中新的項目顯現而改變的標籤。
  • DISAPPEARING - 表示運行在動畫中的項目從容器中消失的標籤。
  • CHANGE_DISAPPEARING - 表示運行在動畫中的項目由於一個項目從容器中消失而改變的標籤。
你可以自己為這四種事件型態自定義動畫來客製化布局transition的外觀或只是告訴動畫系統使用預設的動畫。

在API Demos中有LayoutAnimation的範例,為你演示如何為layout transition定義動畫,接著設定動畫到你想動畫的視圖上。

LayoutAnimationByDefault及它對應的layout_animations_by_default.xml布局資源文件為你演示如何將預設的layout transition轉成XML,你需要做的唯一一件事就是為ViewGroup設定android:animationLayoutchanges屬性為true,舉例:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:id="@+id/verticalContainer"
    android:animateLayoutChanges="true" />

沒有留言:

張貼留言