編輯:關於Android編程
原文地址:http://android.xsoftlab.net/training/transitions/index.html
Activity所呈現的UI經常會由用戶的輸入或者其它事件而發生變化。比如,一個含有輸入框的Activity,在用戶輸入要查找的關鍵字之後,這個輸入框就會隱藏,並會在輸入框的地方展示搜索後的結果。
為了可以在這樣的情況下呈現出連貫的視覺效果,可以在不同View展示與隱藏過程中使用動畫。這些動畫可以為用戶提供一種反饋,並會幫助他們學習應用是如何流轉的。
Android提供了這種轉場框架,它可以使開發者很容易的實現兩個View之間動畫轉換效果。這個框架通過改變View的屬性來實現動畫效果。框架提供了一些常用的動畫效果,並且還允許開發者創建自定義的動畫效果及動畫過程中的生命周期回調。
這節課將會學習如何使用內置的動畫效果來作用兩個View。這節課還囊括了如何創建自定義動畫等知識。
Note: 在Android 4.0之後,Android 4.4.2之前的版本中,使用animateLayoutChanges屬性來使動畫作用布局。更多有關知識,請參見Property Animation及Animating Layout Changes.
動畫所能提供的不僅僅是視覺上的效果,它更多的作用是突出變化,並提供一些行為讓用戶在潛意識中學習程序是如何工作的。我們最常見的例子就是Activity在切換時候的動畫,正常的切換動畫可以讓用戶知道是進入了一個頁面還是退出了一個頁面。
為了幫助開發者可以學習View之間的動畫,Android提供了轉場框架。這個框架可以在View之間變化時一同作用一個或者一組動畫。
轉場框架擁有以下特性:
Group-level animations:可以同時作用一組動畫效果。 Transition-based animation:動畫的運行建立在View屬性值從開始到結束之間數值變化的基礎之上。 Built-in animations:為常見的效果提供內置的動畫,比如淡入、淡出或者平移。 Resource file support:從布局資源文件中加載View層級及內置的動畫。 Lifecycle callbacks:定義回調為動畫作用的過程提供更為精細的控制力。轉場框架可以作用於任何的View。這個View可以是單個的View對象,也可以是復合型的View容器,比如ViewGroup。轉場框架通過改變View的屬性來實現動畫效果。
轉場框架在View層級與動畫的兩條平行線之間工作。該框架的用途是存儲View層級的狀態,然後改變這些層級,再通過存儲並應用動畫定義來實現動畫效果。
下圖演示了View層級與框架對象和動畫之間的關系:
轉場框架提供了抽象的場景、轉換及轉換管理者。這些部分會在下面的部分詳細介紹。如果要使用該框架,首先為View層級創建場景。接下來對View創建轉換效果。為了能啟動轉場動畫,需要使用一個 轉換管理者來指明轉換動畫與結束場景。這個過程會在這節課的剩余課程中詳細描述。
場景保存了View層級的狀態,包括所有的View及其屬性值。一個View層級可以是一個單純的View對象,亦或者是一個復合型的ViewGroup對象。將View的狀態存儲於場景中可以使這些狀態從一個場景轉換到另一個場景。場景框架提供了Scene類來表示一個場景。
轉場框架可以從布局資源文件中創建場景或者從ViewGroup對象中創建場景。在代碼中創建場景在兩個地方會用到:一是動態生成View層級或者在運行時修改場景。
在很多情況下,並不需要專門去創建啟動場景。如果已經采用了一種轉換,那麼轉場框架會將上一個結束場景作為下一個轉換的啟動場景。如果還沒有采用任何轉換,那麼框架會收集屏幕中當前狀態下View的相關信息。
場景也可以定義自己的行為,這個行為會在場景改變的時候運行。比如,在場景轉變完成之後可以利用這個特性來清理View的設置。除了View層級與其屬性值之外,場景還可以存儲View層級的父布局的引用。這個根View被稱為scene root。改變場景與動畫會引起scene root中場景的發生。
更多學習創建場景的知識,請參見Creating a Scene。
在轉場框架中,動畫會創建一系列幀,這些幀描述了View層級從開始到結束場景過程中的每一項細節變化。動畫的有關信息被存在一個名為Transition的對象中。如果要運行動畫,則需要使用TransitionManager對象。轉場框架會在兩個不同的場景中轉換或在當前的場景中轉換不同的狀態。
轉場框架包含了一系列內置轉場,這主要被用於通用動畫效果。比如淡入淡出、調整View尺寸。你也可以使用動畫框架所提供的API來定義自定義場景來創建獨有的動畫效果。轉場框架還可以使開發者整合不同的動畫效果到一個集合中,這個集合可以包含內置的動畫效果或者自定義的動畫效果。
轉場的生命周期與Activity的生命周期極為類似,這代表了動畫執行過程中的每一個轉換狀態。在重要的生命周期狀態下,轉場框架會調用這些回調方法,這可以使開發者在轉場的過程中適時調整用戶界面。
有關更多轉場的相關知識,請參見Applying a Transition及Creating Custom Transitions。
這部分列出了一些轉場框架已知的不足:
動畫作用到SurfaceView上可能不會正常顯示。因為SurfaceView對象由非UI線程更新,所以這個更新可能不會與其它View的動畫保持一致。 當在TextureView上使用動畫時,可能某些特殊的轉場類型不會產生預想中效果。 繼承於AdapterView的類,比如ListView,它們管理子View的方式與轉場框架互不兼容。如果視圖作用動畫於AdapterView等之上,那麼設備界面可能會假死。 如果想使調整尺寸動畫作用於TextView上,那麼TextView上的文本會在動畫完成之前被繪制到一個新的位置。為了避免這個問題,請不要將調整尺寸的動畫作用在包含文本的View上。本文實例講述了Android中AsyncTask與handler用法。分享給大家供大家參考,具體如下:首先,我們得明確下一個概念,什麼是UI線程。顧名思義,ui線程就是管
Android結合版最近幾個版本在包大小配額上超標了,先後采用了包括圖片壓縮,功能H5,無用代碼移除等手段減包,還是有著很大的減包壓力。組內希望我能從代碼的角度減少一些包
OpenglES2.0 for Android:各種變換來一波 監聽屏幕事件 在進行各種變換之前,我們先來了解一下如何監聽屏幕的事件。我們下面的變換都需要用立方體來演示,
1 背景還記得前面《Android應用setContentView與LayoutInflater加載解析機制源碼分析》這篇文章嗎?我們有分析到Activity