Android手势监听上下左右滑动识别
2015-08-05 12:04:47  By: dwtedx

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

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

DD记账
top
+