Android - GestureDetector

本文深入探讨了在Android应用中如何利用触摸事件和手势识别技术,通过GestureDetector类及其相关接口和内部类,实现了复杂手势的识别与处理。详细介绍了如何通过重写相关方法来识别和响应各种手势,包括单击、长按、滑动等,并通过代码实例展示了实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当用户触摸屏幕的时候,会产生许多手势,如:down、up、scroll、filing等。

    View类有一个 View.OnTouchListener 接口,通过重写他的onTouch()方法,我们可以处理一些触摸事件。但是这个方法太过简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦,因为我们要自己根据用户触摸的轨迹去判断是什么手势。

    Android sdk给我们提供了 GestureDetector 类,通过这个类我们可以识别很多的手势,主要是通过他的onTouchEvent(event)方法完成对不同手势的识别。虽然 GestureDetector  能识别手势,但是不同的手势要怎么处理,应该是程序员来具体实现的。

    因此 GestureDetector 类对外提供了两个接口 ( OnGestureListener,OnDoubleTapListener ) 和一个内部类 ( SimpleOnGestureListener ) 。


1、GestureDetector.SimpleOnGestureListener

SimpleOnGestureListener 是GestureDetector的一个内部类。

    程序员可以继承 SimpleOnGestureListener 类,然后重写里面的手势处理方法。

DEMO

public class MainActivity extends Activity {

	private GestureDetector mGestureDetector;  //设置手势探测器
	
	@Override
	public void onCreate(Bundle savedInstanceState) { 
	    super.onCreate(savedInstanceState); 
	    //调用GestureDetector的构造方法,将要识别的对象和处理手势的方法传递进去。
	    mGestureDetector = new GestureDetector(this, new MyGestureListener());
	} 
	
	@Override
	public boolean onTouchEvent(MotionEvent event) { //View的子类都重写了onTouchEvent,用于处理手机屏幕的触摸事件。
	    if (mGestureDetector.onTouchEvent(event)) 
	        return true;  //当mGestureDetector处理了该事件,且不希望其他回调方法再处理该事件,则返回true。
	    else
	        return false;  //其他回调方法仍然可以处理该事件
	} 
	<pre name="code" class="java" style="line-height: 25.1875px;"><span style="white-space:pre">	</span>//SimpleOnGestureListener是GestureDetector的一个内部类,所以这里是 extends 。
class MyGestureListener extends GestureDetector.SimpleOnGestureListener{ @Override public boolean onSingleTapUp(MotionEvent ev) { return true; } @Override public void onShowPress(MotionEvent ev) { } @Override public void onLongPress(MotionEvent ev) { } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return true; } @Override public boolean onDown(MotionEvent ev) { Log.d("DEBUG","onDown"); return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.d("DEBUG","onFling"); return true; } }}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值