編輯:關於Android編程
原文鏈接:http://android.xsoftlab.net/training/transitions/transitions.html
在轉場框架中,動畫是由一幀幀的圖像連續繪制形成的,這一幀幀的圖像描述了啟動場景到結束場景的整個過程。轉場框架將這些動畫作為一個轉場對象,這個對象包含了動畫的相關信息。如果要運行動畫,需要提供一個轉場對象,及結束場景對象給轉場管理者。
這節課將會學習如何在場景轉換中使用平移、縮放及淡入淡出動畫。下節課將會學習如何定義自定義動畫。
在前面的課程中,我們學習了如何創建場景動畫的相關知識。在定義了啟動場景結束場景之後,還需要創建一個Transition對象。轉場框架允許使用內置的轉場對象或動態創建的轉場對象。
這項技術的優點是,不用修改Java代碼就可以實現轉場定義的修改。這項技術還可以將復雜形式的轉場定義代碼分離成簡單的形式,更多的信息請參見Specify Multiple Transitions。
如果要使用內置的轉場資源,主要執行以下步驟:
1.在工程中添加目錄res/transition/。
2.在上面的目錄中創建一個新的XML資源文件。
3.添加一個內置的轉場節點到該文件中。
下面的示例代碼使用了Fade轉場動畫:
res/transition/fade_transition.xml
下面的代碼段展示了如何加載轉場資源:
Transition mFadeTransition =
TransitionInflater.from(this).
inflateTransition(R.transition.fade_transition);
這項技術可以在代碼中動態的創建轉場對象,使得可以在代碼中修改UI界面。創建簡單的內置轉場實例只需要少量的參數。
如果要創建內置的轉場實例,需要調用類Transition子類其中的一個構造方法即可。下面的示例創建了一個Fade轉場的實例:
Transition mFadeTransition = new Fade();
通常需要使用轉場動畫來響應某些事件,比如用戶的輸入行為。考慮有這麼一種情景,當用戶輸入了要搜索的關鍵詞,按下了搜索按鈕,接下來APP會變換場景,變換後的場景顯示了搜索之後的結果,並且原來場景的輸入框與搜索按鈕會被隱藏。
為了使動畫可以響應用戶的某些輸入,需要調用靜態方法 TransitionManager.go(),並需要傳入結束場景及轉場動畫:
TransitionManager.go(mEndingScene, mFadeTransition);
轉場動畫由轉場實例所指定的結束場景開始,這裡的啟動場景是上一個轉場動畫的結束場景。如果沒有上一個轉場,那麼啟動場景會根據當前的UI狀態自動決斷。
如果沒有指定轉場實例,那麼轉場管理者會采用一種自動轉場的動畫。有關更多信息,請參見TransitionManager類。
默認情況下,轉場框架可以對所有的View執行轉場。不過在某些情況下,可能需要將轉場動畫作用在View的子集上。比如,轉場框架並不支持在ListView對象上使用動畫,所以不要試圖在ListView上使用動畫。不過轉場框架允許選擇指定的View來使用動畫。
每一個可以作用轉場動畫的View都被稱為target.不過只可以選擇其中一個與場景相關的部分.
如果要從target列表中要移除View,需要在啟動轉場之前調用removeTarget()方法。如果要往target列表中添加View,調用addTarget()方法即可。有關更多信息,請參見Transition類。
為了能使動畫引起更多的關注,應該使動畫的類型與所發生的事件相匹配。比如說,在移除某些View的時候,使用淡出效果會在潛意識中告訴用戶這個View不再可用。再比如,在屏幕上移動View,最好的方式就是使用動畫可以描述整個移動過程,以便讓用戶注意到View移動到了新的位置上。
你大可不必糾結選哪一種動畫才好,轉場框架提供了一種整合動畫的能力,它可以將內置動畫或者自定義動畫整合到一起一同執行。
如果要在XML中定義轉場集合,需要在res/transitions/目錄下創建一個資源文件,然後在文件中列出各個轉場動畫。下面的代碼段定義了與AutoTransition類相同特性的定義:
如要加載上述的轉場集合,需要調用TransitionInflater.from()方法。由於TransitionSet繼承了Transition,所以可以像普通的Transition對象一樣使用Transition對象集合。
更改View層級並不是修改UI界面的唯一方式。除此之外,還可以在單一層級中通過添加,修改,移除的方式更改用戶界面。比如說,可以通過單一的布局來實現搜索界面。這個布局剛開始只顯示了一個搜索的輸入框與一個搜索圖標。如果要顯示搜索結果,需要在用戶點擊搜索按鈕的時候通過調用ViewGroup.removeView()方法移除搜索按鈕,然後通過ViewGroup.addView()方法添加搜索結果。
你可能在與上述情況相似的情況下采用過類似的解決方式。比起采用兩個單獨的布局文件而言,采用動態修改單個布局文件的方式也可以完成相同的效果。
如果要實現上面的情景,那麼則不需要創建場景。相反,你可以使用延遲轉場動畫實現這種情況。轉場框架的這個特性由當前View層級的狀態開始,記錄了該View層級的變化狀態,最終在系統重繪UI時將轉場應用到這個過程。
如果要使用單一的View層級創建延遲轉場,需要執行以下步驟:
1.如果要觸發轉場事件的發生,則需要調用TransitionManager.beginDelayedTransition()方法,該方法暴露了兩個參數:1.執行更改View的父View,2.要使用的轉場動畫。轉場框架會存儲更改View的當前狀態及屬性值。
2.要更改的View一定是跟使用情況相關的。轉場框架會記錄更改View的改變過程及屬性。
3.在系統重繪用戶界面的過程中,轉場框架會在這個過程中執行動畫。
下面的示例展示了如何使用延遲轉場動畫添加TextView。第一段定義了布局文件:
res/layout/activity_main.xml
...
第二段定義了動畫添加TextView的代碼:
private TextView mLabelText;
private Fade mFade;
private ViewGroup mRootView;
...
// Load the layout
this.setContentView(R.layout.activity_main);
...
// Create a new TextView and set some View properties
mLabelText = new TextView();
mLabelText.setText("Label").setId("1");
// Get the root view and create a transition
mRootView = (ViewGroup) findViewById(R.id.mainLayout);
mFade = new Fade(IN);
// Start recording changes to the view hierarchy
TransitionManager.beginDelayedTransition(mRootView, mFade);
// Add the new TextView to the view hierarchy
mRootView.addView(mLabelText);
// When the system redraws the screen to show this update,
// the framework will animate the addition as a fade in
轉場的生命周期與Activity的生命周期非常類似。它代表了由TransitionManager.go()方法開始到動畫執行結束之間的完整的時間過程。在重要的生命過程中,轉場框架會調用TransitionListener接口所定義的回調。
這些回調是極有用的,比如說,在場景轉變的過程中復制View的屬性值。你不能簡單的將開始時View的值拷貝到結束時的View上,因為在轉場完成之前結束中的View層級還沒有完全被填充。相反的,你可以將值拷貝到一個變量中,然後在轉場框架結束的時候將值拷貝到View層級中。為了可以在轉場完成的時候獲得通知,可以在Activity中實現TransitionListener.onTransitionEnd()方法。
有關更多信息,請參見TransitionListener類的相關說明。
listview是開發中必見的功能應用,各種需求也不盡相同,今天給大家一個帶來一個簡單方便的自定義listview,希望對大家有幫助,閒話不說,先上幾張效果圖1、功能示例
通過前面的幾篇博客,大家看到了Google是如何解釋action bar和fragment以及推薦的用法。俗話說沒有demo的博客不是好博客,下面我會介紹一
0x00 序隨著移動安全越來越火,各種調試工具也都層出不窮,但因為環境和需求的不同,並沒有工具是萬能的。另外工具是死的,人是活的,如果能搞懂工具的原理再結合上自身的經驗,
應用場景: 在App開發中,對於信息的獲取與演示,不可能全部將其獲取與演示,為了在用戶使用中,給予用戶以友好、方便的用戶體驗,以滑動、下拉的效果動態加載數據的要求就會出