package com.example.screensliding;
import android.util.Log;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
public class MyGestureListener implements OnGestureListener {
private MyRightLeftListener listener;
// 垂直方向移动的距离,绝对值
private float distanceY;
// 水平方向移动的距离,绝对值
private float distanceX;
// 移动距离大于下面的值时,才触发滑动屏幕的监听
private float distance = 100;
public MyGestureListener(MyRightLeftListener listener) {
this.listener = listener;
}
/**
* 一旦触摸屏按下,就马上产生onDown事件
*/
@Override
public boolean onDown(MotionEvent e) {
return false;
}
/**
* 点击了触摸屏,但是没有移动和弹起的动作onShowPress和onDown的区别在于 onDown是,
* 一旦触摸屏按下,就马上产生onDown事件,但是onShowPress是onDown事件产生后,
* 一段时间内,如果没有移动鼠标和弹起事件,就认为是onShowPress事件。
*/
@Override
public void onShowPress(MotionEvent e) {
}
/**
* 轻击触摸屏后,弹起。如果这个过程中产onLongPress、onScroll和onFling事件, 就不会 产生onSingleTapUp事件。
*/
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
/**
* 当手在屏幕上滑动过程中触发,参数跟onFling一样(注意两者的区别)
*/
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
/**
* 长按屏幕时触发
*/
@Override
public void onLongPress(MotionEvent e) {
}
/**
* 当手在屏幕上滑动但手离开屏幕时触发
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// 按下时的x坐标
float startX = e1.getX();
// 按下时的y坐标
float startY = e1.getY();
// 抬起时的x坐标
float endtX = e2.getX();
// 抬起时的y坐标
float endtY = e2.getY();
// 水平方向移动的距离,绝对值
distanceX = Math.abs(endtX - startX);
// 垂直方向移动的距离,绝对值
distanceY = Math.abs(endtY - startY);
// 首先判断是水平方向移动还是垂直方向移动
if (distanceX > distanceY) {
// 说明水平反向移动的距离远,就认定为水平移动
if (distanceX > distance) {
// 水平方向移动距离大局默认距离是才触发滑动监听事件
if (startX > endtX) {
// 手指从右往左滑动
Log.e("tag", "手指从右往左滑动");
listener.onLeft();
} else {
// 手指从左往右滑动
Log.e("tag", "手指从左往右滑动");
listener.onRight();
}
}
} else if (distanceX < distanceY) {
// 说明垂直反向移动的距离远,就认定为垂直移动
if (distanceY > distance) {
// 垂直方向移动距离大局默认距离是才触发滑动监听事件
if (startY > endtY) {
// 手指从下往上滑动
Log.e("tag", "手指从下往上滑动");
listener.onUp();
} else {
// 手指从上往下滑动
Log.e("tag", "手指从上往下滑动");
listener.onDown();
}
}
} else {
// 水平方向和垂直方向移动距离相同时,默认为水平方向的移动
if (distanceX > distance) {
// 水平方向移动距离大局默认距离是才触发滑动监听事件
if (startX > endtX) {
// 手指从右往左滑动
Log.e("tag", "手指从右往左滑动");
listener.onLeft();
} else {
// 手指从左往右滑动
Log.e("tag", "手指从左往右滑动");
listener.onRight();
}
}
}
return false;
}
public interface MyRightLeftListener {
/**
* 手指从左往右滑动
*/
void onRight();
/**
* 手指从右往左滑动
*/
void onLeft();
/**
* 手指从下往上滑动
*/
void onUp();
/**
* 手指从上往下滑动
*/
void onDown();
}
}
屏幕的上下左右滑动监听事件详解demo(AS)
需积分: 1 118 浏览量
2018-04-26
17:15:49
上传
评论
收藏 134KB ZIP 举报
x7777777k
- 粉丝: 5
- 资源: 15
最新资源
- 电力场景安全帽检测数据集VOC+YOLO格式295张2类别.7z
- MISC图片隐写MISC图片隐写MISC图片隐写MISC图片隐写MISC图片隐写.txt
- 七维大脑原理:探索人类心智的多元维度.txt
- 电力场景设备漏油检测数据集VOC+YOLO格式338张1类别.7z
- 基于yolov8+pyqt5实现精美界面支持图片视频和摄像检测源码.zip
- 用C语言为母亲节献上一份特别的祝福.zip
- LCD1602液晶显示屏的深入探索与实用指南.zip
- 基于Matlab人脸肤色定理的教师人数统计+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab霍夫曼变换的表盘读数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab火灾烟雾检测源码带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈