一、效果
手在屏幕上劃過一段距離,切換頁面。
二、原理
2.1手在屏幕上出發 onTouch事件
2.2在onTouch事件中完成滑動邏輯處理
? ?2.2.1 判斷劃過的x軸距離,如果大于多少,則startActivtiy
? ?2.2.2 判斷劃過的y軸距離,如果大于多少,則不換頁
? ?2.2.3判斷劃過的速度,如果過慢,則不換頁
3、手在屏幕上移動是很復雜的過程,谷歌提供了手勢識別器工具類。
android.view.GestureDetector.SimpleOnGestureListener
在這個類里實現2的步驟。
三、代碼
package com.zengmg.MobileSafe.activity.phoneguard;import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;/*** 設置頁面基類 該activity不需要在清單文件里配置,因為不需要顯示在屏幕上* * @author zengmg* */
public abstract class SetupBaseActivity extends Activity {public SharedPreferences mPref;// 手勢識別器private GestureDetector mDetector;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mPref = getSharedPreferences("config", MODE_PRIVATE);mDetector = new GestureDetector(this, new SimpleOnGestureListener() {// Fling:猛撲; 猛沖; 急伸。相當于突然劃一下@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) {// 向左滑動,下一頁if (e1.getRawX() - e2.getRawX() > 120) {showNextPage();return true;}// 向右滑動,上一頁else if (e2.getRawX() - e1.getRawX() > 120) {showPreviousPage();return true;}// 滑動速度慢,不換頁if (Math.abs(velocityX) < 30) {Toast.makeText(SetupBaseActivity.this, "滑動太慢了哦!",Toast.LENGTH_SHORT).show();return true;}// Y方向滑動范圍過大,不換頁if (Math.abs(e1.getRawY() - e2.getRawY()) > 120) {Toast.makeText(SetupBaseActivity.this, "Y軸滑太大了哦!",Toast.LENGTH_SHORT).show();return true;}return super.onFling(e1, e2, velocityX, velocityY);}});}@Overridepublic boolean onTouchEvent(MotionEvent event) {mDetector.onTouchEvent(event);//把觸摸事件委托給手勢識別器來執行return super.onTouchEvent(event);}/*** 顯示下一個頁面*/public abstract void showNextPage();/*** 顯示上一個頁面*/public abstract void showPreviousPage();// 下一頁public void next(View view) {showNextPage();}// 上一頁public void previous(View view) {showPreviousPage();}}