為View和Activity設定左右切換動畫
動畫可以增強產品的使用者體驗,也可以帶來很多樂趣。今天我將演示如何為view和Activity新增左右滑動的動畫。注:不是屬性動畫,而是安卓早期引入的補間動畫,對於此處的應用場景來說足夠了。
首先來看看我們將要建立的動畫效果。Activity根據導航的方向滑入滑出:

android-left-right-activity-animation-1.gif
定義動畫
我們總共需要四個動畫,將在xml中定義它們。這四個動畫其實可以分為兩組。第一組是將View移動出視野,第二組是把View從視野之外移進來。
slide_to_left.xml:
從當前位置一直向左滑動,直到離開視野。

image.png
從當前位置一直向右滑動,直到離開視野。

image.png
view從左邊滑入

image.png
slide_from_right.xml:
view從右邊滑入

image.png
每個動畫的持續時間都為@integer/slide_animation_duration,定義在integers.xml中,如下:

image.png
這樣可以讓動畫保持連貫性,所有的動畫都以相同的速度移動。
應用到View上
對一個View應用動畫很簡單,我們只需把從xml載入的動畫應用到View就可以了:

image.png
我喜歡為這些相關的動畫組建立一個工具類,尤其是它們在應用中使用的比較普遍的情況下。
有興趣的加入Android工程師交流Q群:752016839 主要針對Android開發人員提升自己,突破瓶頸,相信你來學習,會有提升和收穫。

image.png

image.png
工具類建立好了之後,我們就可以在應用中任意的使用了,如下:

image.png
Activity之間
在Activity之間使用動畫也很簡單。Activity類為我們提供了一個叫做[overridePendingTransition]( ofollow,noindex">https://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int , int))的方法,我們可以用它來設定進入和退出動畫。如下:
有興趣的加入Android工程師交流Q群:752016839 主要針對Android開發人員提升自己,突破瓶頸,相信你來學習,會有提升和收穫。

image.png
在呼叫startActivity之後呼叫overridePendingTransition可以讓新的Activity執行enterAnimationId,而當前Activity執行exitAnimationId。
把我們早先定義好的動畫放進來,我們就可以讓新的Activity從右邊滑進來,而當前的Activity滑離至左邊視野之外,如下:

image.png
類似的,當新的Activity結束之後,我們可以執行相反的動畫,讓結束的Activity滑出至右邊視野之外,而之前的Activity從左邊滑回來:

image.png
這樣就能做到Activity之間來回流暢的切換,比Activity預設的動畫要好。
保持一致
我絕大多數應用都建立了一個BaseActivity類,把一些可以共享的常見的功能都放在裡面,比如log和顯示fragment。因為我想讓所有的activity切換效果都保持一致,所以我覺得把它放在BaseActivity實在再合適不過了:

image.png
你也可以像我這樣重寫startActivity和finish,這樣就不需要直接呼叫了。記住要呼叫super方法,並重寫所有衍生方法,比如startActivityForResult。
現在你如果想改變動畫效果,只需在更新一個地方就行了。