一、效果
手在屏幕上划过一段距离,切换页面。
二、原理
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();}}