天天看點

Activity 過度動畫讓界面切換實作如牛奶般潤滑的切換

在Activity界面切換的時候 ,我們都是是通過統一的動畫來管理activity 進入進出,這種動畫都寫在xml 檔案裡面,并在 開啟activty 之後開始調用 動畫的,(startActivity(context,class); overridePendingTransition(inId,outId))來進行界面的切換,但是這樣的切換不免給使用者帶來的是生硬的切換,沒有那麼一絲的順暢,是以在android 5.X中,Google 推出了 過度動畫,用來幫助開發者實作友好的界面切換。

Activity 過度動畫讓界面切換實作如牛奶般潤滑的切換

效果:

Activity 過度動畫讓界面切換實作如牛奶般潤滑的切換

以下筆記均來自(《群英傳 》徐宜生)

在 5.X中Android提供了 三種 Transition類型來供我們使用:

- 進入: 決定進入的 Activity 中的視圖怎麼進入螢幕。

- 退出: 決定退出的activity 中的視圖怎麼退出螢幕。

- 共享元素: 共享元素決定了兩 個Activity之間的的動畫如何過度的,如何共享視圖。

在進入和退出的時候包含三種效果:

  • explode(分解) ————> 從螢幕中間進入或退出,進入是從中間開始向兩邊擴充,退出也是從中間開始往兩邊擴散消失。
  • slide(滑動) ————> 從螢幕的邊緣進入或退出。
  • fade(淡出) ————> 從透明到不透明的現實到螢幕上添加視圖或者移除。

共享元素包括:

  • ChangeBounds ————> 改變目标視圖的布局邊界。
  • ChangeClipBounds————> 裁剪目标視圖邊界。
  • ChangeTransform————> 改變目标視圖的縮放比例和旋轉角度
  • ChangeImageTransform ————> 改變目标圖的大小和縮放比例。

如何使用動畫呢?

這個就是直接在 startActivity()裡面直接啟動就好了;

比如我們在A界面要啟動B界面

Intent intent = new Intent(this, Transitions.class); intent.putExtra("flag", 2); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

這樣隻能标志我們打開的另一個界面使用過度動畫,那麼如何顯示呢,其實還是要在B Activity 裡面通

getWindow().setEnterTransition(new Explode());

這個設定一定要在 setContentView(View) 這前,并且還要和設定沒有标題欄一樣設定一個标記

接下類進入 B Acitivyt就有動畫了。退出動畫和這個差不多 就是在B Activity裡面設定的方法不一樣。

  • getWindow().setEnterTransition(new Slide()); ————> 設定進入的動畫
  • getWindow().setExitTransition(new Slide()); ————>設定退出的動畫。

設定動畫也可以在xml 裡面通過主題來設定動畫。但是style.xml要建立在 values-v21的style.xml檔案中 。

實作共享元素:

需要給視圖需要共享的控件通過 增加相應的屬性:

android:transitionName=”xxx”

在 B Activity 中給同樣需要共享的控件加入同樣的屬性,在這裡要注意的這兩個屬性的名字要完全相同,否則就會找不到共享元素。

共享元素隻需要再 A Activity 裡面開啟就好了。

Intent intent = new Intent(this, Transitions.class);

intent.putExtra(“flag”, 3);

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, view, “share”).toBundle());

如果是多個控件的話就需要使用可變參數了,上面那個方法還是一個多變參數的方法,也就是說可以同時接受多個參數:

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,new Pair(view,”share”),new Pair(fabButton,”fab”)).toBundle());

到此過度動畫就結束的,但是裡面的細節還待慢慢的挖掘 。

繼續閱讀