Android手势监听上下左右滑动识别
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