详谈OnTouchListener与OnGestureListener的区别

详谈OnTouchListener与OnGestureListener的区别,第1张

概述Android事件处理机制是基于Listener实现的,比如触摸屏相关的事件,是通过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 ;   }}@H_301_12@

我们可以通过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,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(); 	}}@H_301_12@

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

总结

以上是内存溢出为你收集整理的详谈OnTouchListener与OnGestureListener的区别全部内容,希望文章能够帮你解决详谈OnTouchListener与OnGestureListener的区别所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1149668.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存