Android setontoucheventt和setOnTouchListener中onTouch的区别

android onTouchEvent和setOnTouchListener中onTouch的区别
android中onTouchEvent和setOnTouchListener中onTouch的区别可以有些人并不了解,其实要说明白这个问题先要说下android的事件传递机制。首先看下以下的代码1,这段代码反应了View处理事件的过程:
public boolean dispatchTouchEvent(MotionEvent event) { &&&&&&& if (mOnTouchListener != null && mOnTouchListener.onTouch(this, event)) { &&&&&&&&&&& &&&&&&& } &&&&&&& return onTouchEvent(event); &&& }
在代码1中有一点首先需要明确:
1、如果dispatchTouchEvent返回值为true则本次事件被系统消耗掉(就是被控件处理了), 然后一个新的事件会被传入(如down事件返回true,则后续的move、up等事件也将被系统传入进行处理,否则move、up等事件不会响应);
2、如果dispatchTouchEvent返回值为false,则不会有新的事件被传入。
好,明白了这一点再看那个代码1中if语句后面的条件mOnTouchListener != null && mOnTouchListener.onTouch(this, event),mOnTouchListener 对象其实不就是你写的监听器对象吗?
比如下面代码2的这个匿名对象。
xxxView.setOnTouchListener(new OnTouchListener() { && &&& &&& &@Override && &&& &&& &public boolean onTouch(View v, MotionEvent event) { && &&& &&& &&& & && &&& &&& &} && &&& &});
好,我们再看下代码2中onTouch事件中的返回值:
1、如果代码2 return true则代表代码1中将不会执行 return onTouchEvent(event);语句,这也就是说这次系统事件会被消耗掉,将会再次执行dispatchTouchEvent这个方法。
2、如果代码2 return false则代表代码1会执行onTouchEvent(event);这个方法,本次事件是否会被消耗掉将取决于onTouchEvent的返回值。
1、如果setOnTouchListener中的onTouch方法返回值是true则onTouchEvent方法将不会被执行;
2、只有当setOnTouchListener中的onTouch方法返回值是false时onTouchEvent方法才被执行。
3、以上说的情况适用于View对象而不是ViewGroup对象,ViewGroup对象下次再分析。
1.onTouch方法: onTouch方法是View的 OnTouchListener借口中定义的方法。 当一个View绑定了OnTouchLister后,当有touch事件触发时,就会调用onTouch方法。 (当把手放到View上后,onTouch方法被一遍一遍地被调用)
2.onTouchEvent方法: onTouchEvent方法是override 的Activity的方法。 重新了Activity的onTouchEvent方法后,当屏幕有touch事件时,此方法就会别调用。 (当把手放到Activity上时,onTouchEvent方法就会一遍一遍地被调用)
3.touch事件的传递: 在一个Activity里面放一个TextView的实例tv,并且这个tv的属性设定为 fill_parent 在这种情况下,当手放到屏幕上的时候,首先会是tv响应touch事件,执行onTouch方法。
如果onTouch返回值为true, 表示这个touch事件被onTouch方法处理完毕,不会把touch事件再传递给Activity, 也就是说onTouchEvent方法不会被调用。 (当把手放到屏幕上后,onTouch方法被一遍一遍地被调用)
如果onTouch的返回值是false, 表示这个touch事件没有被tv完全处理,onTouch返回以后,touch事件被传递给Activity, onTouchEvent方法被调用。 (当把手放到屏幕上后,onTouch方法调用一次后,onTouchEvent方法就会一遍一遍地被调用)
本分类共有文章155篇,更多信息详见
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";
/*爱悠闲底部960*75*/
var cpro_id = "u1888128";android onTouchEvent和setOnTouchListener中onTouch的区别_百度知道Android onTouchEvent和setOnTouchListener中onTouch的区别_百度知道The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.android onTouchEvent和setOnTouchListener中onTouch的区别_百度知道

我要回帖

更多关于 android setlistener 的文章

 

随机推荐