欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Android手势监听上下左右滑动识别

程序员文章站 2022-03-01 13:23:20
...

onTouch事件

做什么都好先了解原理以后的工作就会更简单、关于手势以及我们熟悉的onclick、onLongClick事件都是基于对onTouch事件的捕捉和处理、那么在使用手势工具类的前提下我们应该去学习了解基本的onTouch事件


onTouch常用的以下4个事件

1、ACTION_DOWN:

表示按下了屏幕、第一个执行也是必然执行的方法


2、ACTION_MOVE:

表示为移动手势、会不断的执行直到触摸停止


3、ACTION_UP:

表示为离开屏幕、触摸停止的时候执行


4、ACTION_CANCEL:

表示取消手势、不会由用户产生、而是由程序产生的

一个Action_DOWN,多个ACTION_MOVE, 1个ACTION_UP、就构成了Android中众多的事件


onTouch的参数

View受到Touch事件的view对象


MotionEvent

包含的事件的详细信息、例如触摸点的信息、触摸事件类型的信息等、MotionEvent的方法例如getRowX所描述的都是触摸点的信息


几个重要方法的说明:

getRowX:触摸点相对于屏幕的坐标

getX: 触摸点相对于view的坐标

getTop: 按钮左上角相对于父view(LinerLayout)的y坐标

getLeft: 按钮左上角相对于父view(LinerLayout)的x坐标


onTouch的返回值

这个部分涉及到事件传递和处理机制、详细的不在此介绍


作用:

这里的返回值代表的是、对于这个触摸事件touch是否已经处理完成、如果我们设置返回值为true代表的是处理完成、这样就不会再传递给下一个对象、也就是说后面的控件或者对象就不会接收到触摸事件了、反之、后面的对象或控件会在此接收到这个触摸事件并被调用


思路

这里的主要思路就是在ACTION_DOWN按下的第一时间记录下初始的状态、在ACTION_MOVE滑动事件中不断的刷新按钮的位置、为了保证有我们正常理解下的点击事件发生、下面我还加了位置是否移动的判断


这里我写了onTouch方法:

@Override
public boolean onTouch(View v, MotionEvent event) {
//这一步只是我的强迫症而已,因为onTouch事件是不断被调用的
if(view == null)
view = v;
myGesture.onTouchEvent(event);
return false;
}


OnGestureListener有下面的几个方法:

按下(onDown):在按下时调用


抛掷(onFling):手指在触摸屏上迅速移动、并松开的动作


长按(onLongPress):手指按在持续一段时间、并且没有松开


滚动(onScroll):手指在触摸屏上滑动


按住(onShowPress):手指按在触摸屏上、它的时间范围在按下起效、在长按之前


抬起(onSingleTapUp):手指离开触摸屏的那一刹那


SimpleOnGestureListener比OnGestureListener多出来的方法:

双击(onDoubleTap)

双击的第二下Touch down时触发


双击事件(onDoubleTapEvent)

双击的第二下Touch down和up都会触发一次、可用e.getAction()区分


关于按钮功能的说明:可以拖动的按钮、这个功能的核心代码是

v.layout(x - temp[0], y - temp[1], x   v.getWidth() - temp[0], y - temp[1]   v.getHeight());


在滑动事件中调用

view.layout(int l, int t, int r, int b)


若资源对你有帮助、扫描下方的二维码、关注DD博客微信公众号(ddblogs)吧

最后给贴上Demo的源代码、希望对大家有用、有兴趣的哥们可以下载看看

源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1nt5Up7r 密码: jym8