手势
2018-08-12 本文已影响0人
dev晴天
1 手势原理分析 (原理图略)
由手机的坐标系可知(左上角(0,0)向右为正,向下为正):
a 当你的手指从右向左滑动时 起始点的x坐标 > 终点的x坐标 当前页面跳转到下一页 (下一页 加载来)
b 当你的手指从左向右滑动时 起始点的x坐标 < 终点的x坐标 当前页面跳转到上一页
加入 起始点x坐标 为e1 ,终点的为e2 可得
e1 - e2 > 0 从右向左滑动 当前页面跳转到下一页
e1 - e2 < 0 从左向右滑动 当前页面跳转到上一页
代码Demo:
package com.example.administrator.mobilesafe;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by Administrator on 2017/9/12.
*/
// 第一个导航页面
public class Setup1Activity extends Activity{
private GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup1);
// 2 创建手势管理对象 用作管理在onTouchEvent(event)传递过来的数据
gestureDetector = new GestureDetector(this,new GestureDetector.SimpleOnGestureListener(){
// 此处不可直接 new SimpleOnGestureListener()应为 此类为内部类 直接用实现方法太多
// 可以通过 (GestureDetector.SimpleOnGestureListener()) GestureDetector 类调用在new
// 此处重写 public boolean onFling方法 功能监听手势的移动
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// 参数 起始点 终点 在x y 轴的速度 通过e1 e2 的getX或Y() 获得 x 或y坐标
if(e1.getX()-e2.getX()>0){
// 跳转到下一页 (代码复用粘贴即可)
startActivity(new Intent(getApplicationContext(),Setup2Activity.class));
finish();
// 开启平移动画 参数两个 enterAnim exitanim
overridePendingTransition(R.anim.next_in_anim,R.anim.next_out_anim);
}
if(e1.getX()-e2.getX()<0){
// 跳转到上一页
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
// 按钮的点击事件 点击按钮跳转Setup2Activity页面
public void nextPage(View view){
startActivity(new Intent(getApplicationContext(),Setup2Activity.class));
finish();
// 开启平移动画 参数两个 enterAnim exitanim
overridePendingTransition(R.anim.next_in_anim,R.anim.next_out_anim);
}
/* 1
监听屏幕上响应事件的类型 (按下(1次) 移动(多) 抬起(1))重写activity的
onTouchEvent方法
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
// 3 通过手势处理类 接受多种类型的事件用作处理
gestureDetector.onTouchEvent(event);// 对象调用触摸方法吧事件传过去
return super.onTouchEvent(event);
}
}