關于Activity轉場動畫的總結

JarZ79 8年前發布 | 22K 次閱讀 Activity Android開發 移動開發

關于Activity的打開和關閉動畫,我想大部分人都知道以下兩個方法。

//打開的時候
Intent intent=new Intent(MainActivity.this,NewActivity.class); 
startActivity(intent);
overridePendingTransition (R.anim.anim_enter,R.anim.anim_exit);
//關閉時候
finish();
overridePendingTransition (R.anim.anim_enter,R.anim.anim_exit);

但是實際使用不是那么簡單的,需要注意以下幾點。

如果你在fragment中使用如下代碼設置Activity動畫,

getActivity().overridePendingTransition (R.anim.anim_enter,R.anim.anim_exit);

這個方法設置Activity的打開動畫是不生效的,你需要用Fragment中的context強轉為Activity然后在使用才能生效。

Activity activity=(Activity)context;
activity.overridePendingTransition (R.anim.anim_enter,R.anim.anim_exit);

在使用動畫時候會出現打開新Activity時前一個Activity黑屏的問題。這個問題是由于android應用默認的Activity的背景是黑色的,關閉的時候如果你的動畫中沒有設置alpha值的話,是會黑屏的。

網上好多解決辦法是把app的主題設置成透明,最好不要那樣,那樣會導致好多其他的bug,比如我的項目中設置了主題為透明后,播放視頻的surfaceview就顯示不正常了,關閉頁面會導致holder報空指針。

最簡單的方法就是R.anim.anim_exit中加上如下屬性

<alpha     xmlns:android="http://schemas.android.com/apk/res/android"          
android:duration="300" //注意時間需要和 R.anim.anim_enter中保持一致  
android:fromAlpha="1.0"      
android:toAlpha="1.0" />

如果是想全局設置Activity的轉場動畫的話,你可以采用如下方式:

給全局activity設置樣式 values文件下的styles.xml

<style name="ThemeActivity" 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">//同一樣需要注意anim持續時間和alpha值的設置
    <item name="android:activityOpenEnterAnimation">@anim/anim_enter</item>
    <item name="android:activityOpenExitAnimation">@anim/anim_exit</item>
    <item name="android:activityCloseEnterAnimation">@anim/back_enter</item>
    <item name="android:activityCloseExitAnimation">@anim/back_exit</item>
</style>

在AndroidManifest.xml設置主題

android:theme="@style/ThemeActivity"

這樣全局Activity轉場動畫就設置完成了。

 

來自:http://www.jianshu.com/p/f959e634ccd1

 

 本文由用戶 JarZ79 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!