好幾天都木有更新博客了,這段時(shí)間是在是太忙了,不過積累經(jīng)驗(yàn)的習(xí)慣不能荒廢愕撰,于是決定今天不管忙到多晚,一定要記錄一篇
這次記錄的是我剛好今天學(xué)到的一點(diǎn)知識(shí),有關(guān)于activity的切換動(dòng)畫的搞挣。
這兩天有幾家企業(yè)在學(xué)校招生带迟,面試了一家公司,經(jīng)過筆試和面試囱桨,HR說今天會(huì)給我一份任務(wù)需求仓犬,讓我在兩天內(nèi)完成(我去,時(shí)間好緊)舍肠,今天收到任務(wù)書便立馬放下手中的項(xiàng)目開始著手搀继。任務(wù)是要完成一個(gè)智能家居類的App,想了想畢竟是給HR的不能做的太寒顫貌夕,起碼的動(dòng)畫效果還是得有的律歼,于是乎就有了今天的問題。
如何添加Activity的切換動(dòng)畫呢
先上效果圖(GIF顯示效果比較卡啡专,不過實(shí)際是很流暢的)
找到了兩種實(shí)現(xiàn)辦法
1. overridePendingTransition方法
在startActivity后加上這樣一行代碼
startActivity(new Intent(MainActivity.this , SelectWiFiActivity.class));
overridePendingTransition(R.anim.up_in, R.anim.up_out);
然后在跳轉(zhuǎn)到的activity里重寫finish方法
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.down_in, R.anim.down_out);
}
overridePendingTransition的兩個(gè)參數(shù)分別是新的activity進(jìn)入的動(dòng)畫和當(dāng)前activity退出的動(dòng)畫
2.自定義主題style
在style.xml文件夾內(nèi)加入
<style name="AnimActivity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowAnimationStyle">@style/AnimationActivity</item>
<item name="android:windowNoTitle">true</item>
</style>
<style name="AnimationActivity" parent="@android:style/Animation.Activity" >
<item name="android:activityOpenEnterAnimation">@anim/up_in</item>
<item name="android:activityOpenExitAnimation">@anim/up_out</item>
<item name="android:activityCloseEnterAnimation">@anim/down_in</item>
<item name="android:activityCloseExitAnimation">@anim/down_out</item>
</style>
A 啟動(dòng) B 時(shí),A 從屏幕上消失制圈,這時(shí)執(zhí)行的是A的android:activityOpenExitAnimation
A 啟動(dòng) B 時(shí)们童,B 出現(xiàn)在屏幕上,這時(shí)執(zhí)行的是B的android:activityOpenEnterAnimation
從 B 返回A時(shí)鲸鹦,B從屏幕上消失慧库,這時(shí)執(zhí)行的是B的android:activityCloseExitAnimation
從 B 返回A時(shí),A 出現(xiàn)在屏幕上馋嗜,這時(shí)執(zhí)行的是A的android:activityCloseEnterAnimation
我的動(dòng)畫文件齐板,供參考
up_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="100%p"
android:toYDelta="0"
android:duration="800"
/>
</set>
up_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="-100%p"
android:duration="800"
/>
</set>
down_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="-100%p"
android:toYDelta="0"
android:duration="800"
/>
</set>
down_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="100%p"
android:duration="800"
/>
</set>
至此,一聲感嘆葛菇,animation set居然還有如此之操作甘磨?hh
更多動(dòng)畫效果可以參考
Android Developer API文檔 (需 科 學(xué) 上 網(wǎng))
使用style主題既可以應(yīng)用在AndroidManifest.xml下 application的android:theme里作為全局主題動(dòng)畫效果,也可以單獨(dú)應(yīng)用在activity內(nèi)單獨(dú)應(yīng)用于某些activity
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/MyAppTheme">
剛使用可能會(huì)出現(xiàn)動(dòng)畫混亂導(dǎo)致過渡效果不理想眯停,沒關(guān)系济舆,多嘗試幾次就能理解哪個(gè)參數(shù)對(duì)應(yīng)了哪一步的動(dòng)畫了。
不早了莺债,先睡覺滋觉。
明早起來繼續(xù)奮斗!