OnTouch
实际上,所有手势都由一个Activity上的一个事件处理。 只要在屏幕上触摸视图,就会调用OnTouch。 它提供了创建一些非常有趣的手势所需的所有信息。 Android提供了一些简单的类,使您可以快速将一些手势添加到应用程序中,而无需真正了解手势的细节。 触发OnTouch时,您会收到一个MotionEvent和对所触摸视图的引用。
运动事件说明
每次在OnTouch回调中触摸屏幕时,Android操作系统就会返回Motion事件。 MotionEvent对象包含有关有多少手指触摸屏幕以及移动手指的速度的信息。 它具有处理任何手势所需的所有细节。 Android也更进一步。
Android为一些基本的手势检测提供了一些不错的类,例如单指拖放。 通过使用SimpleOnGestureListener,它们为开发人员提供了一种实现几种手势的简便方法,而又不会使您的手真正弄脏。
如何使用OnGestureListener
使用OnGestureListener非常容易。 在您的活动中,将OnTouch侦听器连接到活动的根视图(如果要在全屏上显示手势)。
rootLayout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
yourGestureListener.onTouchEvent(event);
return false;
}
});
现在,您的SimpleOnGestureListener将处理rootlayout上的所有touch事件。 剩下的就是实现您的Gesture Listener在某些触摸事件上要做的事情。 通过简单地覆盖所需的方法,就可以实现手势功能,而无需确定用户完成了哪种手势。 例如,您可以重写SimpleOnGestureListener的OnScroll方法,以实现自己的用于在View上滚动的功能。
为什么Simple GestureDetector不太好
Simple GestureDetector非常适合只需要一些基本手势的任何手势。 但是,对于要进行两次(或更多次)触摸的任何手势,您都没有运气。 如果您真的想深入了解手势,则确实需要进一步研究Motion Event对象。
创建更多复杂的手势
让我们朝与上述示例不同的方向前进。 可以说,与其在我们的OnTouch回调中仅调用Gesture Listener,不如让我们再看一下Motion Event对象。
我们收到的每个运动事件都有其自己的动作,例如DOWN (在视图上按下手指)或MOVE (在VEVE上 ,手指从二维平面上的一个位置移动到另一位置)。 运动事件还具有一个对处理多点触摸手势非常有用的动作,称为POINTER_DOWN ,当在视图上进行第二次触摸时使用该动作。
使用这些动作,可以创建复杂的手势。 例如,捏手势(通常用于放大地图)可以像这样工作:
1.收到DOWN。 我们记录用户触摸屏幕的初始位置。
2.收到POINTER_DOWN。 由于我们知道这可能是两指手势,因此我们记录了第二次触摸的点
3.收到MOVE。 现在,我们检查一下我们检测到的两个指针是否已经朝着彼此移动。 *
*请注意,在运动事件对象中,可以使用event.getX()方法获取不同触摸的坐标。
手势预测
Android还可以将特定手势加载到您的应用程序中。 这些特定手势比上面提到的手势更独特,例如在屏幕上绘制Z符号。
创建这些类型的手势需要模拟器。 您首先在模拟器中绘制手势,然后将它们保存到文件中。 然后,您可以获取创建的手势文件并将其加载到应用程序中。 通过将GestureOverLayView添加到您的布局中,您可以使用新创建的手势来执行所需的操作。
单击此处以获取有关手势预测的更多信息。
参考: Android教程: JCG合作伙伴 Isaac Taylor在Programming Mobile博客上 为您的应用添加手势 。
翻译自: https://www.javacodegeeks.com/2011/09/android-tutorial-gestures-in-your-app.html