activity切換直接經過overridePendingTransition()方法,直接輸入動畫資源就能夠實現。java
view之間的切換須要設置setInAnimation和setOutAnimation,須要編碼實現。android
package com.zskx; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ViewFlipper; public class AnimationActivity extends Activity { ViewFlipper viewFlipper; Animation anim_in_left2right ; //從左到右進入動畫 Animation anim_out_left2right ; //從左到右出去動畫 Animation anim_in_right2left ; //從右到左進入動畫 Animation anim_out_right2left ; //從右到左出去動畫 int windowWidth; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_activity); viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper); windowWidth = getWindowManager().getDefaultDisplay().getWidth(); //屏幕寬度 setAnimation(); //加載動畫資源 } private void setAnimation() { anim_in_left2right = AnimationUtils.loadAnimation(this, R.anim.in_left2right); anim_out_left2right = AnimationUtils.loadAnimation(this, R.anim.out_left2right); anim_in_right2left = AnimationUtils.loadAnimation(this, R.anim.in_right2left); anim_out_right2left = AnimationUtils.loadAnimation(this, R.anim.out_right2left); } /** * 啓動第二個activity * @param v */ public void startSecond(View v){ Intent intent = new Intent(this, SecondActivity.class); startActivity(intent); AnimationActivity.this.overridePendingTransition(R.anim.activity_in, R.anim.activity_out);//切換activity的動畫,直接輸入動畫R資源 } float lastX; float curX; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = event.getX(); break; case MotionEvent.ACTION_UP: curX = event.getX(); if(curX - lastX > windowWidth * 0.75){ //拉動超過屏幕3/4, 從左到右切換page。 viewFlipper.setInAnimation(anim_in_left2right); //設置動畫必須在showNext()以前 viewFlipper.setOutAnimation(anim_out_left2right); viewFlipper.showNext(); // 切換到下一頁 }else if(lastX - curX > windowWidth * 0.75){ //拉動超過屏幕3/4,從右到左切換page viewFlipper.setInAnimation(anim_in_right2left); //設置動畫必須在showPrevious()以前 viewFlipper.setOutAnimation(anim_out_right2left); viewFlipper.showPrevious(); // 切換到上一頁 } break; case MotionEvent.ACTION_MOVE: break; } return super.onTouchEvent(event); } }
淡入淡出動畫的xml:
inapp
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <alpha android:fromAlpha="0" android:toAlpha="1.0" android:duration="3000" /> </set>
out
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <alpha android:fromAlpha="1.0" android:toAlpha="0" android:duration="3000" /> </set>
左右互換動畫的xml:ide
in:動畫
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="3000" /> </set>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="100%p" <!--窗口寬度--> android:toXDelta="0" android:duration="3000" /> </set>
outthis
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="3000" /> </set>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="3000" /> </set>