在南昌APP開發(fā)中,shared element transition(又稱為hero transition)是material design中引入的另一新動畫特效。 它適用于一種特殊場景:兩個待切換視圖顯示同樣一些元素。 這是一種常見的交互模式:點擊一個元素,彈出新的視圖顯示元素明細。
對于兩個展示相同元素的視圖,其間的任何動畫切換場景都可以使用shared element transition 來實現(xiàn)。圖1中,右邊的大圖片和左邊的小圖片是同一張圖。這張圖就是個shared element。
圖1 放大版照片視圖
在Lollipop中,Android有辦法實現(xiàn)activity或fragment間的動畫切換。圖2是動畫過程中的一副截圖,可大致看出實現(xiàn)效果?,F(xiàn)在南昌APP制作開發(fā)公司小編就來帶大家看一看如何把這種動畫應(yīng)用于activity。
圖2 shared element的變換
實現(xiàn)activity間的動畫切換涉及以下三個步驟:
1、打開activity transition;
2、為每個shared element視圖設(shè)置transition名值;
3、啟動帶ActivityOptions(觸發(fā)動畫)的activity。
首先是打開activity transition。如果你的activity使用了AppCompat主題,這個步驟可以直接跳過。(AppCompat繼承Material主題,會自動為你打開activity transition。)
在CriminalIntent的例子中,為了讓目標activity擁有透明背景,我們使用了@android:style/ Theme.Translucent.NoTitleBar主題樣式。這個主題沒有繼承Material主題,所以需要手工打開activity transition。有兩種方式可以打開activity transition,先來看如何用代碼打開它。
以代碼的方式打開activity transition
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
super.onCreate(savedInstanceState);
...
}
另外一種方式是修改activity的樣式,設(shè)置android:windowActivityTransitions屬性值為 true。
在樣式里打開activity transition
再來看如何為shared element視圖設(shè)置transition名值。Android在API 21中為View引入了 transitionName屬性。所以,可以在布局或代碼中設(shè)置這個屬性值。兩種方式各有其適用的場景,具體問題具體分析。本例中,我們在布局XML文件里,將android:transitionName屬性設(shè) 置為image,如圖3所示。
圖3 設(shè)置android:transitionName屬性值為image
然后,再定義一個startWithTransition(...)靜態(tài)方法,為視圖設(shè)置transition名稱,如下代碼1所示。
定義startWithTransition(...)方法
public static void startWithTransition(Activity activity, Intent intent,
View sourceView) {
ViewCompat.setTransitionName(sourceView, "image");
ActivityOptionsCompat options = ActivityOptionsCompat
.makeSceneTransitionAnimation(activity, sourceView, "image");
activity.startActivity(intent, options.toBundle());
}
Android舊版本系統(tǒng)中,View視圖沒有setTransitionName(String)屬性方法。所以,需要使用ViewCompat.setTransitionName(View, String)方法設(shè)置TransitionName。 在代碼清單1中,作為三個步驟的后一步,我們使用ActivityOptions對象,讓操作系統(tǒng)知道shared element是什么,以及使用哪個transitionName值。
當然,transition和shared element transition能做的遠不止這些。例如,它們還可以用于fragment間的動畫切換。這里就不多做說明了,想了解更多關(guān)于南昌APP開發(fā)方面的相關(guān)技術(shù),歡迎訪問百恒網(wǎng)絡(luò)網(wǎng)站,更多相關(guān)專業(yè)技術(shù)知識與您分享,相信您一定會有收獲!