你們可能遇到過跟小馬同樣的問題,就是在項目中不給Activity添加動畫感受好爛,特此,小馬找個時間學習下Activity跳轉時添加動畫,網上資料一堆,但有些講的是錯的,並且只有文字沒有效果,不如本身來,順帶試下什麼效果,這個工程裏面小馬收集了一些經常使用的動畫文件在工程目錄anim下(我都加了註釋,你們能夠直接用),至於動畫標籤裏面的屬性你們能夠參考以下路徑的官方文檔:太全了,有些還能夠直接使用的...安卓偉滴太大了....developers/Dev Guide/Application Resources/Resources Type/Animation 風格一如既往,先看效果 ,再看代碼,你們看類短,但必定仔細讀下小馬註釋部分,讀完了我保證你確定不會暈Activity之間的動畫了,小馬先講下,今天的測試主要是三個Activity,詳細結構你們直接看工程結構圖就明白了,看效果(工具作的GIF有點失真,但真機上絕對流暢):java
效果一:android
效果二:app
效果三:iphone
工程結構圖:ide
解釋註釋中Activity與overridePendingTransition(a,b)當前與目標對應關係圖:工具
第一個Activity控制類代碼以下,你們主要看這個類,另外兩個類,小馬只貼下代碼,沒加註釋,由於基本同樣,只是改了下動畫資源:學習
- package com.xiaoma.betweenactivityanimation;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- /**
- * @Title: BetweenActivityAnimationDemoActivity.java
- * @Package com.xiaoma.betweenactivityanimation
- * @Description: Activity之間跳轉動畫學習 若是怕動畫過短看不清楚的,
- * 能夠把動畫XML文件裏面標籤屬性 during值設置的長些,吼吼
- * @author XiaoMa
- */
- public class BetweenActivityAnimationDemoActivity extends Activity implements
- OnClickListener {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- init();
- }
- private void init() {
- findViewById(R.id.button1).setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- if (v.getId() == R.id.button1) {
- Intent intent = new Intent(getApplicationContext(),
- BetweenActivityAnimationDemoActivity2.class);
- startActivity(intent);
- /**
- * 對下面這個方法的官方解釋以下,版本從2.0後開始哦
- * Call immediately after one of the flavors of startActivity(Intent) or finish()
- * to specify an explicit transition animation to perform next.
- * 用工具查到解釋爲:
- * 在startActivity(Intent)或finish()之法以後調用後,會當即用一個指定的描述動畫的XML文件來執行
- * 下一個Activity
- *
- * 下面兩句是對這個方法兩個參數的解釋,在此以前小馬也看了下別人講的,
- * 實際上是錯的,看官方的解釋確定沒錯,不懂英語的用工具查下
- * 小馬一直都說的,我英語很爛,我能查的你必定也能查獲得
- * 1.enterAnim A resource ID of the animation resource
- * to use for the incoming activity. Use 0 for no animation.
- * 2.exitAnim A resource ID of the animation resource
- * to use for the outgoing activity. Use 0 for no animation.
- * 一:進入動畫 一個動畫資源,用於目標Activity 進入屏幕時的動畫,此處寫0表明無動畫
- * 二:退出動畫 一個動畫資源,用於當前Activity 退出屏幕時的動畫,此處寫0表明無動畫
- *
- * 這個目標、當前怎麼理解?好比:startActivity( A(當前)--> B(目標)) 《finish()同樣》
- * 下面參數中有一個爲0,就表示A退出時無動畫...必定把參數搞清楚,否則動畫就搞暈了
- * overridePendingTransition(R.anim.zoom_enter, 0);
- * 方法兩個參數與目標、當前Activity對應關係如效果下方綠×××所示
- */
- overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
- }
- }
- /** 列幾個安卓自帶的動畫效果,你們能夠把上面 overridePendingTransition參數改下看看效果
- * 實現淡入淡出的效果
- overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
- overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
- 由左向右滑入的效果
- overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
- overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
- */
- }
第二個Activity代碼以下:測試
- package com.xiaoma.betweenactivityanimation;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- public class BetweenActivityAnimationDemoActivity2 extends Activity implements OnClickListener{
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main2);
- init();
- }
- private void init(){
- findViewById(R.id.button2).setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- if(v.getId() == R.id.button2){
- Intent i = new Intent(getApplicationContext(),BetweenActivityAnimationDemoActivity3.class);
- startActivity(i);
- overridePendingTransition(R.anim.hyperspace_in, R.anim.hyperspace_out);
- }
- }
- }
第三個Activity代碼以下:動畫
- package com.xiaoma.betweenactivityanimation;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- public class BetweenActivityAnimationDemoActivity3 extends Activity implements OnClickListener {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main3);
- init();
- }
- private void init(){
- findViewById(R.id.button3).setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- if(v.getId() == R.id.button3)
- {
- finish();
- //若是這個地方不想用本身的,能夠直接調安卓提供的動畫,以下:
- overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
- //安卓自帶的動畫哦,看效果就知道了
- //overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
- }
- }
- }
下面貼下小馬在上面效果中用到的動畫代碼:ui
- <?xml version="1.0" encoding="utf-8"?>
- <!-- zoom_exit,即相似iphone的進入效果 -->
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/decelerate_interpolator"
- android:zAdjustment="top">
- <scale android:fromXScale="1.0" android:toXScale=".5"
- android:fromYScale="1.0" android:toYScale=".5"
- android:pivotX="50%p" android:pivotY="50%p"
- android:duration="3000" />
- <alpha android:fromAlpha="1.0" android:toAlpha="0"
- android:duration="1000"/>
- </set>
- <!-- 實現zoom_enter即相似iphone退出時的效果 -->
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/decelerate_interpolator">
- <scale android:fromXScale="2.0" android:toXScale="1.0"
- android:fromYScale="2.0" android:toYScale="1.0"
- android:pivotX="50%p" android:pivotY="50%p"
- android:duration="1000"
- />
- </set>
- <!-- hyperspace_in 浮動式動畫 -->
- <?xml version="1.0" encoding="utf-8"?>
- <alpha xmlns:android="http://schemas.android.com/apk/res/android"
- android:duration="300"
- android:fromAlpha="0.0"
- android:startOffset="1200"
- android:toAlpha="1.0" />
- <!--hyperspace_out 浮動式動畫 -->
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false">
- <scale
- android:interpolator="@android:anim/accelerate_decelerate_interpolator"
- android:fromXScale="1.0"
- android:toXScale="1.4"
- android:fromYScale="1.0"
- android:toYScale="0.6"
- android:pivotX="50%"
- android:pivotY="50%"
- android:fillAfter="false"
- android:duration="700" />
- <set
- android:interpolator="@android:anim/accelerate_interpolator"
- android:startOffset="700">
- <scale
- android:fromXScale="1.4"
- android:toXScale="0.0"
- android:fromYScale="0.6"
- android:toYScale="0.0"
- android:pivotX="50%"
- android:pivotY="50%"
- android:duration="400" />
- <rotate
- android:fromDegrees="0"
- android:toDegrees="-45"
- android:toYScale="0.0"
- android:pivotX="50%"
- android:pivotY="50%"
- android:duration="400" />
- </set>
- </set>
- <!-- push_up_in 上下滑入式 -->
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android" >
- <translate
- android:duration="300"
- android:fromYDelta="100%p"
- android:toYDelta="0" />
- <alpha
- android:duration="300"
- android:fromAlpha="0.0"
- android:toAlpha="1.0" />
- </set>
- <!-- push_up_out 上下滑入式 -->
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android" >
- <translate
- android:duration="300"
- android:fromYDelta="0"
- android:toYDelta="-100%p" />
- <alpha
- android:duration="300"
- android:fromAlpha="1.0"
- android:toAlpha="0.0" />
- </set>
最後,老樣子,吼吼,源碼小馬直接放附件裏面了,有須要使用的朋友能夠自已下載下,交流學習,有解釋不清楚的地方,還請批評指出,小馬改進....謝謝!加油,必定要努力!