滑动切换activity

一、效果

手在屏幕上划过一段距离,切换页面。

二、原理

2.1手在屏幕上出发 onTouch事件

2.2在onTouch事件中完成滑动逻辑处理

   2.2.1 判断划过的x轴距离,如果大于多少,则startActivtiy

   2.2.2 判断划过的y轴距离,如果大于多少,则不换页

   2.2.3判断划过的速度,如果过慢,则不换页


滑动切换activity_第1张图片

滑动切换activity_第2张图片

滑动切换activity_第3张图片

滑动切换activity_第4张图片


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;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		mPref = getSharedPreferences("config", MODE_PRIVATE);
		mDetector = new GestureDetector(this, new SimpleOnGestureListener() {
			// Fling:猛扑; 猛冲; 急伸。相当于突然划一下
			@Override
			public 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);
			}
		});
	}
	
	@Override
	public 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();
	}

}



你可能感兴趣的:(滑动切换activity)