iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
2
Software Development

Android animation 30天上手系列 第 13

Day13 LayoutTransition

  • 分享至 

  • xImage
  •  

LayoutTransition是Android 在API 11提供了一個能在當ViewGroup中有新增、刪除、隱藏View時,呈現的動畫。

demo

要做到這樣的效果,只要在Layout 裡設定android:animateLayoutChanges="true",即可以在ViewGroup裡有新增、刪除View時使用動畫。

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

除了預設的動畫,LayoutTransition提供4種子View變化的類型讓我們加入不同的動畫。

APPEARING:元素在ViewGroup中新增時需要動畫顯示。
DISAPPEARING:元素在ViewGroup中消失時需要動畫顯示。
CHANGE_APPEARING:由於ViewGroup中要顯現一個新的元素,其它元素的變化需要動畫顯示。
CHANGE_DISAPPEARING:由於ViewGroup中某個元素要消失,其它元素的變化需要動畫顯示。

APPEARING

元素在ViewGroup中新增時需要動畫顯示。

appearin
步驟1:新增anim_scale_x.xml,設定為放大X為1.5倍再縮回
還記得在Property animation提到的動畫嗎,這裡用的就是Property animation的objectAnimator

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:propertyName="scaleX"
        android:valueFrom="1"
        android:valueTo="1.5"
        android:valueType="floatType" />
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:propertyName="scaleX"
        android:valueFrom="1.5"
        android:valueTo="1"
        android:valueType="floatType" />
</set>

步驟2:指定LayoutTransition.APPEARING的動畫為R.animator.anim_scale_x

layoutTransition = LayoutTransition()
resultLayout.layoutTransition = layoutTransition

//View出現的動畫
layoutTransition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(this, R.animator.anim_scale_x))

DISAPPEARING

元素在ViewGroup中消失時需要動畫顯示。
同樣的,移除一個View,也能加上客制的動畫,讓被移除的Button加上變紅色的動畫

disappearing

步驟1:新增anim_color.xml.xml,改為顏色為紅色

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="200"
        android:propertyName="backgroundColor"
        android:valueTo="#ff0000" />
</set>

步驟2:指定LayoutTransitions.DISAPPEARING的動畫為R.animator.anim_color

layoutTransition.setAnimator(LayoutTransition.DISAPPEARING, AnimatorInflater.loadAnimator(this, R.animator.anim_color))

CHANGE_APPEARING

由於ViewGroup中要顯現一個新的元素,其它元素的變化需要動畫顯示。

layoutTransition.setAnimator(LayoutTransition.CHANGE_APPEARING, AnimatorInflater.loadAnimator(this, R.animator.layout_change_appearing))

CHANGE_DISAPPEARING

由於ViewGroup中某個元素要消失,其它元素的變化需要動畫顯示。

layoutTransition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, AnimatorInflater.loadAnimator(this, R.animator.layout_change_disappearing))

完整程式:https://github.com/evanchen76/layouttransition


上一篇
Day12 LayoutAnimation
下一篇
Day14 Activity transition
系列文
Android animation 30天上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言