Android activity動畫不生效原因及解決方案總結(jié)
activity動畫方式
在AndroidMenifest中添加activity的動畫屬性windowAnimationStyle
<item name="android:windowAnimationStyle">@style/anim_fade</item>
在activity代碼中添加 overridePendingTransition
overridePendingTransition(int enterAnim,int exitAnim)
問題匯總
- 一、動畫寫的有問題
- 二、activity theme中設置動畫為null,或者parent theme設置動畫為null
- 三、overridePendingTransition 使用時機問題
- 四、overridePendingTransition 寫錯地方
- 五、onPause與onResume中的overridePendingTransition會覆蓋其他位置
- 六、透明度影響動畫
- 七、插件化問題導致找不到動畫
一、動畫寫的有問題
動畫本身出問題的方式無法一一列舉,常見的有“duration設置為0”,“from與to的值設置相同”。
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromAlpha="0.0" android:toAlpha="0.0" android:duration="300" />
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="0" />
二、activity theme中設置動畫為null,或者parent theme設置動畫為null
如下:
<style name="TestActivityTheme"> <item name="android:windowNoTitle">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAnimationStyle">@null</item> </style>
<style name="TestActivityTheme" parent="ParentActivityTheme"> </style> <style name="ParentActivityTheme"> <item name="android:windowNoTitle">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAnimationStyle">@null</item> </style>
三、overridePendingTransition 使用時機問題
overridePendingTransition 源碼注釋如下:
Call immediately after one of the flavors of startActivity(Intent) or finish to specify an explicit transition animation to perform next.
As of Build.VERSION_CODES.JELLY_BEAN an alternative to using this with starting activities is to supply the desired animation information through a ActivityOptions bundle to startActivity(Intent, Bundle) or a related function. This allows you to specify a custom animation even when starting an activity from outside the context of the current top activity.
Params:
enterAnim – A resource ID of the animation resource to use for the incoming activity. Use 0 for no animation.
exitAnim – A resource ID of the animation resource to use for the outgoing activity. Use 0 for no animation.
其中說了兩個overridePendingTransition 的使用時機:
- 在startActivity 之后
- 在finish之后
如下:
startActivity(intent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
finish(); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
四、overridePendingTransition 寫錯地方
寫錯地方就純屬是開發(fā)者的粗心,例子如下:
重寫了finish方法,但是調(diào)用的是finishAndRemoveTask
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); finishAndRemoveTask(); } @Override public void finish() { super.finish(); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); }
五、onPause與onResume中的overridePendingTransition會覆蓋其他位置
根據(jù)筆者經(jīng)驗,onPause和onResume中如果寫了overridePendingTransition,那么其效果會覆蓋其他地方設置的動畫。
比如你在finish的時候設置了overridePendingTransition,然后在onPause中也設置了overridePendingTransition,那么最終效果會以onPause中的。
比如下面的例子中,finish之后設置了動畫,onPause中關閉了activity的動畫,那么最終就是沒有動畫。
@Override protected void onPause() { super.onPause(); overridePendingTransition(0,0) } @Override public void finish() { super.finish(); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); }
六、透明度影響動畫
比如頁面本身就是透明的情況下,還設置透明度動畫,那么就會看上去無效。
七、插件化問題導致找不到動畫
如果動畫資源找不到,都會引起動畫失效的問題。
插件化的場景中,比較特殊的地方是:
有些插件化框架加載動畫資源,需要使用其框架對應的API來操作。
原因是:插件化框架一般都會更改資源的id,通過固定的API才能夠找到對應的資源。
在部分插件化框架中,如果直接調(diào)用overridePendingTransition來加載動畫,會無法找到動畫資源,并且Android Studio也不會報錯。
比如下面代碼,直接在插件中調(diào)用就可能會找不到資源,并且Android Studio也不會報錯。
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
到此這篇關于Android activity動畫不生效原因及解決方案總結(jié)的文章就介紹到這了,更多相關Android activity動畫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android Listview上下拉動刷新tab滑動切換功能
這篇文章主要介紹了Android Listview上下拉動刷新tab滑動切換功能的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-04-04Android RecyclerView添加頭部和底部的方法
這篇文章主要為大家詳細介紹了Android RecyclerView添加頭部和底部的方法,感興趣的小伙伴們可以參考一下2016-05-05Android中Glide加載到RelativeLayout背景圖方法示例
Glide框架大家應該都很熟悉,我們可以使用Glide加載網(wǎng)絡圖片、加載gif圖片,使用簡單。下面這篇文章主要給大家介紹了關于Android中Glide加載到RelativeLayout背景圖的相關資料,需要的朋友可以參考下。2017-12-12Android中RecyclerView拖拽、側(cè)刪功能的實現(xiàn)代碼
這篇文章主要介紹了Android中RecyclerView拖拽、側(cè)刪功能的實現(xiàn)代碼,需要的朋友可以參考下2017-09-09