详谈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-09-09
  • Android ListView填充数据的方法

    Android ListView填充数据的方法

    这篇文章主要介绍了Android ListView填充数据的方法的相关资料,大多数实现这样的功能都是使用XML文件,这里就说下不使用布局文件如何实现,需要的朋友可以参考下
    2017-09-09
  • android如何改变editText控件中部分文字的格式

    android如何改变editText控件中部分文字的格式

    本文主要介绍了android改变editText控件中部分文字格式的方法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Android startActivityForResult的调用与封装详解

    Android startActivityForResult的调用与封装详解

    startActivityForResult 可以说是我们常用的一种操作了,目前有哪些方式实现 startActivityForResult 的功能呢?本文就来和大家详细聊聊
    2023-03-03
  • android实现背景平铺的三种方法

    android实现背景平铺的三种方法

    这篇文章主要介绍了Android的图片平铺效果的实现方法,主要有使用系统API、使用XML配置、自定义绘制三种方法,需要的朋友可以参考下
    2014-02-02
  • Android自定义View实现颜色选取器

    Android自定义View实现颜色选取器

    这篇文章主要为大家详细介绍了Android自定义View实现颜色选取器 ,类似SeekBar的方式通过滑动选择颜色,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android 自定义可拖拽View界面渲染刷新后不会自动回到起始位置

    Android 自定义可拖拽View界面渲染刷新后不会自动回到起始位置

    这篇文章主要介绍了Android 自定义可拖拽View界面渲染刷新后不会自动回到起始位置的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Android自定义view实现拖拽选择按钮

    Android自定义view实现拖拽选择按钮

    这篇文章主要为大家详细介绍了Android自定义view实现拖拽选择按钮,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 使用ViewPager实现左右循环滑动及滑动跳转

    使用ViewPager实现左右循环滑动及滑动跳转

    今天实现了左右滑动,至于在最后一页滑动跳转,这个也做了但是效果不是太好,也希望有实现的朋友能够分享下
    2013-01-01
  • android几种不同对话框的实现方式

    android几种不同对话框的实现方式

    这篇文章介绍了android几种不同对话框的实现,主要包括:1、显示提示消息的对话框.2、简单列表项对话框。3、单选列表项对话框。4、多选列表对话框。5、自定义列表项对话框。6、自定义View的对话框,需要的朋友可以参考下
    2015-08-08

最新评论