Android官方开发文档Training系列课程中文版:动画视图之转场框架介绍
原文地址:http://android.xsoftlab.net/training/transitions/index.html
引言
Activity所呈現(xiàn)的UI經(jīng)常會由用戶的輸入或者其它事件而發(fā)生變化。比如,一個含有輸入框的Activity,在用戶輸入要查找的關(guān)鍵字之后,這個輸入框就會隱藏,并會在輸入框的地方展示搜索后的結(jié)果。
為了可以在這樣的情況下呈現(xiàn)出連貫的視覺效果,可以在不同View展示與隱藏過程中使用動畫。這些動畫可以為用戶提供一種反饋,并會幫助他們學習應用是如何流轉(zhuǎn)的。
Android提供了這種轉(zhuǎn)場框架,它可以使開發(fā)者很容易的實現(xiàn)兩個View之間動畫轉(zhuǎn)換效果。這個框架通過改變View的屬性來實現(xiàn)動畫效果。框架提供了一些常用的動畫效果,并且還允許開發(fā)者創(chuàng)建自定義的動畫效果及動畫過程中的生命周期回調(diào)。
這節(jié)課將會學習如何使用內(nèi)置的動畫效果來作用兩個View。這節(jié)課還囊括了如何創(chuàng)建自定義動畫等知識。
Note: 在Android 4.0之后,Android 4.4.2之前的版本中,使用animateLayoutChanges屬性來使動畫作用布局。更多有關(guān)知識,請參見Property Animation及Animating Layout Changes.
轉(zhuǎn)場框架
動畫所能提供的不僅僅是視覺上的效果,它更多的作用是突出變化,并提供一些行為讓用戶在潛意識中學習程序是如何工作的。我們最常見的例子就是Activity在切換時候的動畫,正常的切換動畫可以讓用戶知道是進入了一個頁面還是退出了一個頁面。
為了幫助開發(fā)者可以學習View之間的動畫,Android提供了轉(zhuǎn)場框架。這個框架可以在View之間變化時一同作用一個或者一組動畫。
轉(zhuǎn)場框架擁有以下特性:
- Group-level animations:可以同時作用一組動畫效果。
- Transition-based animation:動畫的運行建立在View屬性值從開始到結(jié)束之間數(shù)值變化的基礎之上。
- Built-in animations:為常見的效果提供內(nèi)置的動畫,比如淡入、淡出或者平移。
- Resource file support:從布局資源文件中加載View層級及內(nèi)置的動畫。
- Lifecycle callbacks:定義回調(diào)為動畫作用的過程提供更為精細的控制力。
概述
轉(zhuǎn)場框架可以作用于任何的View。這個View可以是單個的View對象,也可以是復合型的View容器,比如ViewGroup。轉(zhuǎn)場框架通過改變View的屬性來實現(xiàn)動畫效果。
轉(zhuǎn)場框架在View層級與動畫的兩條平行線之間工作。該框架的用途是存儲View層級的狀態(tài),然后改變這些層級,再通過存儲并應用動畫定義來實現(xiàn)動畫效果。
下圖演示了View層級與框架對象和動畫之間的關(guān)系:
轉(zhuǎn)場框架提供了抽象的場景、轉(zhuǎn)換及轉(zhuǎn)換管理者。這些部分會在下面的部分詳細介紹。如果要使用該框架,首先為View層級創(chuàng)建場景。接下來對View創(chuàng)建轉(zhuǎn)換效果。為了能啟動轉(zhuǎn)場動畫,需要使用一個 轉(zhuǎn)換管理者來指明轉(zhuǎn)換動畫與結(jié)束場景。這個過程會在這節(jié)課的剩余課程中詳細描述。
場景
場景保存了View層級的狀態(tài),包括所有的View及其屬性值。一個View層級可以是一個單純的View對象,亦或者是一個復合型的ViewGroup對象。將View的狀態(tài)存儲于場景中可以使這些狀態(tài)從一個場景轉(zhuǎn)換到另一個場景。場景框架提供了Scene類來表示一個場景。
轉(zhuǎn)場框架可以從布局資源文件中創(chuàng)建場景或者從ViewGroup對象中創(chuàng)建場景。在代碼中創(chuàng)建場景在兩個地方會用到:一是動態(tài)生成View層級或者在運行時修改場景。
在很多情況下,并不需要專門去創(chuàng)建啟動場景。如果已經(jīng)采用了一種轉(zhuǎn)換,那么轉(zhuǎn)場框架會將上一個結(jié)束場景作為下一個轉(zhuǎn)換的啟動場景。如果還沒有采用任何轉(zhuǎn)換,那么框架會收集屏幕中當前狀態(tài)下View的相關(guān)信息。
場景也可以定義自己的行為,這個行為會在場景改變的時候運行。比如,在場景轉(zhuǎn)變完成之后可以利用這個特性來清理View的設置。除了View層級與其屬性值之外,場景還可以存儲View層級的父布局的引用。這個根View被稱為scene root。改變場景與動畫會引起scene root中場景的發(fā)生。
更多學習創(chuàng)建場景的知識,請參見Creating a Scene。
轉(zhuǎn)場
在轉(zhuǎn)場框架中,動畫會創(chuàng)建一系列幀,這些幀描述了View層級從開始到結(jié)束場景過程中的每一項細節(jié)變化。動畫的有關(guān)信息被存在一個名為Transition的對象中。如果要運行動畫,則需要使用TransitionManager對象。轉(zhuǎn)場框架會在兩個不同的場景中轉(zhuǎn)換或在當前的場景中轉(zhuǎn)換不同的狀態(tài)。
轉(zhuǎn)場框架包含了一系列內(nèi)置轉(zhuǎn)場,這主要被用于通用動畫效果。比如淡入淡出、調(diào)整View尺寸。你也可以使用動畫框架所提供的API來定義自定義場景來創(chuàng)建獨有的動畫效果。轉(zhuǎn)場框架還可以使開發(fā)者整合不同的動畫效果到一個集合中,這個集合可以包含內(nèi)置的動畫效果或者自定義的動畫效果。
轉(zhuǎn)場的生命周期與Activity的生命周期極為類似,這代表了動畫執(zhí)行過程中的每一個轉(zhuǎn)換狀態(tài)。在重要的生命周期狀態(tài)下,轉(zhuǎn)場框架會調(diào)用這些回調(diào)方法,這可以使開發(fā)者在轉(zhuǎn)場的過程中適時調(diào)整用戶界面。
有關(guān)更多轉(zhuǎn)場的相關(guān)知識,請參見Applying a Transition及Creating Custom Transitions。
轉(zhuǎn)場的局限性
這部分列出了一些轉(zhuǎn)場框架已知的不足:
- 動畫作用到SurfaceView上可能不會正常顯示。因為SurfaceView對象由非UI線程更新,所以這個更新可能不會與其它View的動畫保持一致。
- 當在TextureView上使用動畫時,可能某些特殊的轉(zhuǎn)場類型不會產(chǎn)生預想中效果。
- 繼承于AdapterView的類,比如ListView,它們管理子View的方式與轉(zhuǎn)場框架互不兼容。如果視圖作用動畫于AdapterView等之上,那么設備界面可能會假死。
- 如果想使調(diào)整尺寸動畫作用于TextView上,那么TextView上的文本會在動畫完成之前被繪制到一個新的位置。為了避免這個問題,請不要將調(diào)整尺寸的動畫作用在包含文本的View上。
總結(jié)
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:动画视图之转场框架介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JavaWeb】数据库基础复习
- 下一篇: Android官方开发文档Trainin