項目地址:https://github.com/SherlockShi/AndroidMaterialAnimationPractise
一、前言
Transition框架可以用來給一個
View
的布局屬性變化
增加動畫效果。你要做的事,就是改變你想改變的屬性,然后Transition框架就會自動為你展示必要的動畫效果。Transition框架也可以用來給當前界面布局(current activity layout)里面的
元素變化
增加動畫效果。Transition發(fā)生在各個場景(Scenes)中,一個場景只是我們UI布局中的一個常見的靜態(tài)布局而已。只要從一個場景切換到另一個,Transition框架就會自動為場景的切換增加動畫效果。
屬性變化
指的是某一個View,比如一個ImageView,它的寬度、高度、位置等參數(shù)的變化;而元素變化
,指的是整個布局、場景里面的元素位置等參數(shù)的變化。它們的區(qū)別主要在于面向的對象不同,一個是針對View,一個是針對Layout。
二、效果圖
屬性變化 | 元素變化 |
---|---|
三、屬性變化
1. 調用beginDelayedTransition()
方法
調用這行代碼,就相當我們告訴Transition框架,“大哥,界面要變化了,你準備下,幫忙給點動效撒~”
TransitionManager.beginDelayedTransition(llytRoot);
2. 改變View的屬性
然后只要改變View的某一個或多個屬性。
ViewGroup.LayoutParams params = ivSquareGreen.getLayoutParams();
params.width = 200;
ivSquareGreen.setLayoutParams(params);
改變View的寬度屬性,會觸發(fā)layoutMeasure,Transition框架就會記錄下起始值和結束值,然后展示從起始值到結束值的動畫效果。
四、元素變化
1. 調用getSceneForLayout()
方法
這個方法會根據每一個布局文件,創(chuàng)建出一個個的場景(Scene)。
scene1 = Scene.getSceneForLayout(flytRoot, R.layout.activity_animations_scene1, this);
scene2 = Scene.getSceneForLayout(flytRoot, R.layout.activity_animations_scene2, this);
scene3 = Scene.getSceneForLayout(flytRoot, R.layout.activity_animations_scene3, this);
scene4 = Scene.getSceneForLayout(flytRoot, R.layout.activity_animations_scene4, this);
2. 調用go()
方法
調用這個方法,會跳轉到下一個場景,并基于當前場景和目標場景展示指定的動畫效果。
TransitionManager.go(scene1, new ChangeBounds());
五、參考資料
PS:歡迎關注SherlockShi博客