Android5.0之Activity的轉(zhuǎn)場動(dòng)畫的示例
Activity的轉(zhuǎn)場動(dòng)畫很早就有,但是太過于單調(diào),樣式也不好看,于是Google在Android5.0之后,又推出的新的轉(zhuǎn)場動(dòng)畫,效果還是非常炫的,今天我們一起來看一下。
1.舊轉(zhuǎn)場動(dòng)畫回顧
首先我們還是先來看看在5.0之前如果我們想要在啟動(dòng)Activity時(shí)使用動(dòng)畫該怎么做呢?
startActivity(new Intent(this, Main3Activity.class));
overridePendingTransition(R.anim.in,R.anim.out);
對應(yīng)的入場和出場動(dòng)畫就是兩個(gè)補(bǔ)間動(dòng)畫,如下:
入場動(dòng)畫:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:toYDelta="0"
android:fromYDelta="100%"
android:duration="1500"/>
</set>
出場動(dòng)畫:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="1500"
android:fromYDelta="0"
android:toYDelta="-100%"/>
</set>
這種動(dòng)畫是針對整個(gè)Activity而言的,無法設(shè)置Activity中元素的入場/出場動(dòng)畫。如果想要設(shè)置Activity中元素的出場/入場動(dòng)畫可以通過設(shè)置布局上元素的元素的出/入場動(dòng)畫來實(shí)現(xiàn)。但這無疑增加了工作量。
2 5.0之后的轉(zhuǎn)場動(dòng)畫
Android5.0之后Activity的出入場動(dòng)畫總體上來說可以分為兩種,一種就是分解、滑動(dòng)進(jìn)入、淡入淡出,另外一種就是共享元素動(dòng)畫,下面我們分別就這兩種動(dòng)畫進(jìn)行說明。
2.1 分解、滑動(dòng)進(jìn)入、淡入淡出
1.分解
先來看一張效果圖:

就是這樣一種效果,那我們接下來看看這種效果要怎么實(shí)現(xiàn)。
首先,把之前啟動(dòng)Activity的代碼改成下面的寫法:
startActivity(new Intent(this, Main2Activity.class), ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
添加完成之后,在Main2Activity中設(shè)置該Activity的進(jìn)出場動(dòng)畫即可:
getWindow().setEnterTransition(new Explode().setDuration(2000)); getWindow().setExitTransition(new Explode().setDuration(2000));
OK,就是這么簡單,哦,對了,大家一定要記得在styles.xml文件中添加下面一行代碼,表示激活A(yù)ctivity中元素的過渡效果:
<item name="android:windowContentTransitions">true</item>
2.滑動(dòng)進(jìn)入
有了上面的步驟,再設(shè)置滑動(dòng)進(jìn)入就很簡單了,只需要修改Main2Activity中的兩行代碼即可:
getWindow().setEnterTransition(new Slide().setDuration(2000)); getWindow().setExitTransition(new Slide().setDuration(2000));
顯示效果如下:

3.淡入淡出
Main2Activity修改代碼如下:
getWindow().setEnterTransition(new Fade().setDuration(2000));
getWindow().setExitTransition(new Fade().setDuration(2000));
顯示效果如下:

2.2 共享元素動(dòng)畫
共享元素動(dòng)畫是一個(gè)非常神奇的東東,我們先來看看效果:

可能這個(gè)Gif動(dòng)畫還不太清晰,我再來解釋一下,在MainActivity和Main2Activity里邊都有一個(gè)Button,只不過一個(gè)大一個(gè)小,從MainActivity跳轉(zhuǎn)到Main2Activity時(shí),我并沒有感覺到Activity的跳轉(zhuǎn),只是覺得好像第一個(gè)頁面的Button放大了,同理,當(dāng)我從第二個(gè)頁面回到第一個(gè)頁面時(shí),也好像Button變小了。OK,這就是我們的Activity共享元素。
當(dāng)兩個(gè)Activity中有同一個(gè)控件的時(shí)候,我們便可以采用共享元素動(dòng)畫。
使用共享元素動(dòng)畫的時(shí)候,我們需要首先給MainActivity和Main2Activity中的兩個(gè)button分別添加android:transitionName="mybtn"屬性,并且該屬性的值要相同,這樣系統(tǒng)才知道這兩個(gè)控件是共享元素。設(shè)置完成之后,接下來就是啟動(dòng)Activity的代碼了,如下:
startActivity(new Intent(this,Main2Activity.class), ActivityOptions.makeSceneTransitionAnimation(this,view,"mybtn").toBundle());
還是上面那種啟動(dòng)方式的重載方法,只不過這里多了兩個(gè)參數(shù),view表示MainActivity中的共享元素(就是那個(gè)Button),第二個(gè)參數(shù)表示布局文件中transitionAnimation屬性的值。OK,就這么簡單。
這時(shí)有的筒子可能有疑問了,那我如果兩個(gè)頁面中有多個(gè)共享元素該怎么辦呢?簡單,android:transitionName屬性還像上面一樣設(shè)置,然后在啟動(dòng)Activity時(shí)我們可以通過Pair.create方法來設(shè)置多個(gè)共享元素,如下:
startActivity(new Intent(this, Main2Activity.class),
ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(((View) iv1),"myiv"), create(((View) textView),"mytv")).toBundle());
Pair.create方法中有兩個(gè)參數(shù),第一個(gè)是共享元素的實(shí)例(注意要是View類型),第二個(gè)參數(shù)是該View的transitionAnimation屬性的值。
就這么簡單,筒子們快速嘗試一下吧。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android轉(zhuǎn)場動(dòng)畫深入分析探究
- Android?Flutter實(shí)現(xiàn)頁面切換轉(zhuǎn)場動(dòng)畫效果
- Android實(shí)現(xiàn)Reveal圓形Activity轉(zhuǎn)場動(dòng)畫的完整步驟
- Android工具欄頂出轉(zhuǎn)場動(dòng)畫的實(shí)現(xiàn)方法實(shí)例
- 詳解Android(共享元素)轉(zhuǎn)場動(dòng)畫開發(fā)實(shí)踐
- Android中轉(zhuǎn)場動(dòng)畫的實(shí)現(xiàn)與兼容性處理
- Android轉(zhuǎn)場效果實(shí)現(xiàn)示例淺析
相關(guān)文章
Android百度地圖應(yīng)用開發(fā)基礎(chǔ)知識(shí)
這篇文章主要為大家詳細(xì)介紹了Android百度地圖應(yīng)用開發(fā)基礎(chǔ)知識(shí),為開發(fā)百度地圖應(yīng)用做準(zhǔn)備,感興趣的小伙伴們可以參考一下2016-06-06
Android音視頻之視頻采集(系統(tǒng)API預(yù)覽)
這篇文章主要為大家詳細(xì)介紹了Android音視頻之視頻采集,系統(tǒng)API預(yù)覽,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Android自定義ListView實(shí)現(xiàn)仿QQ可拖拽列表功能
這篇文章主要介紹了Android自定義ListView實(shí)現(xiàn)仿QQ可拖拽列表功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
Android實(shí)現(xiàn)省市區(qū)三級聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)省市區(qū)三級聯(lián)動(dòng),Spinner實(shí)現(xiàn)省市區(qū)的三級聯(lián)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Android自定義dialog可選擇展示年月日時(shí)間選擇欄
這篇文章主要介紹了Android自定義dialog可選擇展示年月日時(shí)間選擇欄,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下2017-03-03
android POST數(shù)據(jù)遇到的UTF-8編碼(亂碼)問題解決辦法
這篇文章主要介紹了android POST數(shù)據(jù)遇到的UTF-8編碼(亂碼)問題解決辦法,需要的朋友可以參考下2014-04-04
Android Compose自定義TextField實(shí)現(xiàn)自定義的輸入框
眾所周知Compose中默認(rèn)的TextField和OutlineTextField樣式并不能滿足所有的使用場景,所以自定義TextField就成了必備技能。本文將自定義TextField實(shí)現(xiàn)自定義的輸入框,感興趣的可以了解一下2022-03-03
Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)攔截讀取功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)攔截讀取功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
深入理解Android中的Window和WindowManager
這篇文章給大家介紹了Window和WindowManager知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-02-02

