详谈OnTouchListener与OnGestureListener的区别

 更新时间:2017年04月11日 11:02:43   投稿:jingxian  
下面小编就为大家带来一篇详谈OnTouchListener与OnGestureListener的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Android事件处理机制是基于Listener实现的,比如触摸屏相关的事件,是通过OnTouchListener实现的;而手势是通过OnGestureListener实现的,那么这两者有什么关联呢?

OnTouchListener

OnTouchListener接口中包含一个onTouch()方法,直接看一个例子:

public class MainActivity extends Activity implements OnTouchListener {
	public void onCreate(Bundle outState) {
  	super.onCreate(outState);
  	setContentView(R.layout.main);
  	TextView tv = (TextView) findViewById(R.id.tv);
  	tv.setOnTouchListener(this);
  }

  public boolean onTouch(View v, MotionEvent event) {
  	Toast.makeText(this, "Touch Touch", Toast.LENGTH_SHORT).show();
		return false ; 
  }
}

我们可以通过MotionEvent的getAction()方法来获取Touch事件的类型,包括 ACTION_DOWN(按下触摸屏), ACTION_MOVE(按下触摸屏后移动受力点), ACTION_UP(松开触摸屏)和ACTION_CANCEL(不会由用户直接触发)。借助对于用户不同操作的判断,结合getRawX()、 getRawY()、getX()和getY()等方法来获取坐标后,我们可以实现诸如拖动某一个按钮,拖动滚动条等功能。

可以看到OnTouchListener只能监听到三种触摸事件,即按下,移动,松开,如果想要监听到双击、滑动、长按等复杂的手势操作,这个时候就必须得用到OnGestureListener了。

OnGestureListener

接着上面的例子,这次加入手势监听:

public class MainActivity extends Activity implements OnTouchListener, OnGestureListener {
	private GestureDetector mGestureDetector; 

	public void onCreate(Bundle outState) {
  	super.onCreate(outState);
  	setContentView(R.layout.main);

  	mGestureDetector = new GestureDetector(this);
  	TextView tv = (TextView) findViewById(R.id.tv);
  	tv.setOnTouchListener(this);
  }

  public boolean onTouch(View v, MotionEvent event) {
  	return mGestureDetector.onTouchEvent(event);
  }

  // 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发 
  public boolean onDown(MotionEvent arg0) {
		Log.i("MyGesture", "onDown");
		Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();   
		return true;
	}

	// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发, 注意和onDown()的区别,强调的是没有松开或者拖动的状态
	public void onShowPress(MotionEvent e) {
		Log.i("MyGesture", "onShowPress");      
		Toast.makeText(this, "onShowPress", Toast.LENGTH_SHORT).show();
	}

	// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发

	public  boolean onSingleTapUp(MotionEvent e) {
		Log.i("MyGesture", "onSingleTapUp");
		Toast.makeText(this, "onSingleTapUp", Toast.LENGTH_SHORT).show();
		return true;
	}

	// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发    

	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {  
		Log.i("MyGesture", "onFling");
		Toast.makeText(this, "onFling", Toast.LENGTH_LONG).show();   
		return true;
	}

 	// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发

	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {      
		Log.i("MyGesture", "onScroll");
 		Toast.makeText(this, "onScroll", Toast.LENGTH_LONG).show();
		return true;
 	}

 	// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发

	public  void onLongPress(MotionEvent e) {
		Log.i("MyGesture", "onLongPress");
		Toast.makeText(this, "onLongPress", Toast.LENGTH_LONG).show();
 	}
}

以上这篇详谈OnTouchListener与OnGestureListener的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Android手势操作示例(上/下/左/右的判断)

    Android手势操作示例(上/下/左/右的判断)

    这篇文章主要介绍了Android手势操作方法,包含了针对上、下、左、右等方向的判断,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • 详解Android的网络数据存储

    详解Android的网络数据存储

    LeanCloud是一种简单高效的数据和文件存储服务,本文主要介绍了利用LeanCloud来进行网络数据的存储的实现方法。具有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • 详解Android 在 ViewPager 中使用 Fragment 的懒加载

    详解Android 在 ViewPager 中使用 Fragment 的懒加载

    本篇文章主要介绍了Android 在 ViewPager 中使用 Fragment 的懒加载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Android开发vsts agent支持自定义task过程详解

    Android开发vsts agent支持自定义task过程详解

    这篇文章主要介绍了Android开发vsts agent支持自定义task过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Activity生命周期实例讲解

    Activity生命周期实例讲解

    这篇文章介绍了Activity中7个与生命周期有关的函数,使用实例代码说明他们的使用方法
    2013-11-11
  • mac开发android环境搭建步骤图解

    mac开发android环境搭建步骤图解

    这里比较详细的来总结下mac开发android的环境搭建步骤安装过程,希望对一些正准备配置Android开发环境的小伙伴们有一定帮助
    2014-01-01
  • Android高级UI特效仿直播点赞动画效果

    Android高级UI特效仿直播点赞动画效果

    这篇文章主要介绍了Android高级UI特效仿直播点赞动画效果,最近比较火的抖音快手直播视频都有这样的效果,下面脚本之家小编给大家带来android 仿直播点赞效果的实现代码,需要的朋友参考下吧
    2018-03-03
  • 更新至Android Studio4.1后发现as打不开的解决方法(原因分析)

    更新至Android Studio4.1后发现as打不开的解决方法(原因分析)

    这篇文章主要介绍了更新至Android Studio4.1后发现as打不开的解决方案,本文给大家分享问题所在原因给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Android 添加系统服务的方法详解

    Android 添加系统服务的方法详解

    这篇文章主要介绍了Android 添加系统服务的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Android多线程之同步锁的使用

    Android多线程之同步锁的使用

    本篇文章主要介绍了Android多线程之同步锁的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论