左右スライド切替Activityを実現
8334 ワード
1.パッケージOnGestureListener(PS:コードの簡潔性のためにOnGestureListenerを1つのクラスにカプセル化し、メンバー変数としてonFlingメソッドのみを実現すればよい)
2.activityでOnTouchListenerとインスタンス化GestureDetectorを実現
上の原理はやはり比較的簡単です:現在のページにOnTouchListenerを追加して、このページのすべてのtouchイベントでonTouchメソッドを呼び出して、それをGestureDetectorに渡して処理します.GestureDetectorにリスニングを追加してコールバックし、OnGestureListenerに移行して処理します.3.activity切り替えのアニメーションを追加:startActivityを呼び出した後、onPendingIntentを呼び出し、activity切り替えアニメーションを有効にします.例えばin_from_left.xml(画面左側からアニメーション)
4.小さなコツは、activityスタックのシンプルさを保つために、MiddleActivityのlaunchModeをsingleTask 5に設定することができる.質問:ページにクリック可能なものがある場合、クリック可能な上(例えばButton上)でスライド切り替えactivityは無効です.6.Demoを添付しますので、ご参考までにhttp://download.csdn.net/detail/guchuanhang/9053801
/** * onFling * * @author Chuanhang.Gu * */
public class OnGestureListener implements android.view.GestureDetector.OnGestureListener {
final int FLING_MIN_DISTANCE = 50;
final float FLING_MIN_VELOCITY = 50;
@Override
public boolean onDown(MotionEvent e) {
// return true, onFling
// : activity setOnLongclick(true);
// PS: :
return true;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return false;
}
}
2.activityでOnTouchListenerとインスタンス化GestureDetectorを実現
public class MiddleActivity extends Activity implements OnTouchListener {
GestureDetector gd;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText("Middle");
textView.setBackgroundColor(getResources().getColor(R.color.green));
setContentView(textView);
textView.setOnTouchListener(this);
gd = new GestureDetector(this, mFlingListener);
}
OnGestureListener mFlingListener = new com.example.viewpagerdemo1.OnGestureListener() {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
Intent intent = new Intent(MiddleActivity.this,
LeftActivity.class);
startActivity(intent);
Toast.makeText(MiddleActivity.this, " ", Toast.LENGTH_SHORT)
.show();
overridePendingTransition(R.anim.in_from_right,
R.anim.out_to_left);
} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Activity
Intent intent = new Intent(MiddleActivity.this,
RightActivity.class);
startActivity(intent);
Toast.makeText(MiddleActivity.this, " ", Toast.LENGTH_SHORT)
.show();
overridePendingTransition(R.anim.in_from_left,
R.anim.out_to_right);
}
return false;
}
};
@Override
public boolean onTouch(View v, MotionEvent event) {
v.performClick();
return gd.onTouchEvent(event);
}
}
上の原理はやはり比較的簡単です:現在のページにOnTouchListenerを追加して、このページのすべてのtouchイベントでonTouchメソッドを呼び出して、それをGestureDetectorに渡して処理します.GestureDetectorにリスニングを追加してコールバックし、OnGestureListenerに移行して処理します.3.activity切り替えのアニメーションを追加:startActivityを呼び出した後、onPendingIntentを呼び出し、activity切り替えアニメーションを有効にします.例えばin_from_left.xml(画面左側からアニメーション)
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" >
<translate android:duration="500" android:fromXDelta="-100%p" android:toXDelta="0%p" />
</set>
4.小さなコツは、activityスタックのシンプルさを保つために、MiddleActivityのlaunchModeをsingleTask 5に設定することができる.質問:ページにクリック可能なものがある場合、クリック可能な上(例えばButton上)でスライド切り替えactivityは無効です.6.Demoを添付しますので、ご参考までにhttp://download.csdn.net/detail/guchuanhang/9053801