Acitivity進入退出動畫效果的兩種實現


以前做項目的時候一直沒有注意過activity切換動畫的問題,一方面因為沒有人要求,一方面因為自己還沒能靜下心來好好學習。現在把這個問題弄清楚了,拿出來分享下。自己也做個總結。

        我這里說的兩種實現一種是通過調用overridePendingTransition方式指定將要打開的activity的動畫和當前activity的退出動畫;另一種是我昨天在做dialog進入退出時提出的想法,通過style來指定某個activity的進入退出的動畫效果。

 

先說第一種實現方式:

overridePendingTransition方法的作用就是指定將要打開的Activity的動畫和當前Activity的退出動畫

谷歌官網上說,該方法應該在調用startActivity()或者finish()之后立即調用

overridePendingTransition方法的第一個參數enterAnim是指進入Activity的動畫,第二個參數exitAnim是指當前Activity的退出動畫,比如說我代碼這么寫:

 

[java]  view plain copy
 
  1. Intent i = new Intent(MainActivity.this, MainActivity2.class);  
  2. startActivity(i);  
  3. overridePendingTransition(R.anim.enter, R.anim.exit);  

我的MainActivity會執行R.anim.exit動畫,被打開的MainActivity2會執行R.anim.enter動畫。

 

finish的時候調用:

 

[java]  view plain copy
 
  1. this.finish();  
  2. overridePendingTransition(R.anim.enter, R.anim.exit);  

我是在剛剛打開的MainActivity2里面執行的這段代碼,所以MainAcivity2會執行R.anim.exit動畫,而MainActivity將重新獲得焦點顯示出來,將執行R.anim.enter動畫。

 

因為以前對overridePendingTransition實現進入退出動畫一直處於混亂狀態,所以第一種方法啰嗦的多了點。

R.anim.enter(從左側進入)

 

[html]  view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <translate  
  4.         android:duration="2000"  
  5.         android:fromXDelta="-100%p"  
  6.         android:toXDelta="0%p" />  
  7. </set>  


R.anim.exit(從右側退出)

 

 

[html]  view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <translate  
  4.         android:duration="2000"  
  5.         android:fromXDelta="0%p"  
  6.         android:toXDelta="100%p" />  
  7. </set>  

 

 

第二中發法實現Activity動畫效果主要是通過style進行指定。

可以寫一個如下的style

 

[html]  view plain copy
 
  1. <style name="mystyle" parent="android:Animation">  
  2.      <item name="@android:windowEnterAnimation">@anim/enter</item>  
  3.      <item name="@android:windowExitAnimation">@anim/exit</item>  
  4. </style>  

然后通過window.setWindowAnimations方法指定給當前的Activity,這樣,當這個Activity進入退出的時候就會分別執行windowEnterAnimation和windowExitAnimation Item指定的anim了。具體的enter和exit動畫和上面的一樣。

 

設置代碼和設置dialog進入退出一樣:

 

[java]  view plain copy
 
  1. getWindow().setWindowAnimations(R.style.mystyle);  

另外還可以通過在配置文件中通過給Ativity指定thame來將動畫效果設置給Activity

 

代碼如下:

 

[html]  view plain copy
 
  1. <style name="AppTheme" parent="AppBaseTheme">  
  2.     <item name="android:windowAnimationStyle">@style/mystyle</item>  
  3. </style>  
  4. <style name="mystyle" parent="android:Animation">  
  5. <item name="@android:windowEnterAnimation">@anim/enter</item>  
  6.     <item name="@android:windowExitAnimation">@anim/exit</item>  
  7. </style>  
  8.   
  9. //配置文件中這么寫的  
  10. <activity  
  11.     android:name="com.example.activityanimdemo.MainActivity2"  
  12.     android:theme="@style/AppTheme" >  
  13. </activity>  

除了可以通過windowEnterAnimation和windowExitAnimation Item指定進入退出動畫效果,還可以通過以下Item來指定

 

 

[html]  view plain copy
 
  1. <item name="android:activityOpenEnterAnimation"></item>  
  2. <item name="android:activityOpenExitAnimation"></item>  
  3. <item name="android:activityCloseEnterAnimation"></item>  
  4. <item name="android:activityCloseExitAnimation"></item>  


另外,我試了下這同時用overridePendingTransition指定Activity的動畫和用style指定Activity的動畫,發現他們指定的動畫會同時執行。

 

原文:http://blog.csdn.net/fcx520/article/details/13997275


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM