2011.08.30——— android setOnTouchListener onTouchEvent
参考:[url]http://blog.youkuaiyun.com/tsiannian/article/details/6625999[/url]
测试代码如下:
结论:
[color=blue]1、当在TextViw上触摸时 先触发setOnTouchLisener
如果setOnTouchLisener返回false 会触发onTouchEvent 并且后续的move up都只会触发onTouchEvent
如果setOnTouchLisener返回true 后续的move up 都只会触发setOnTouchLisener
2、当在其他位置触摸时 只会触发onTouchEvent
3、如果加上onClickListener时,
如果setOnTouchLisener返回false 后续的move up都只会触发setOnTouchLisener;并且只有当up事件是在发生在textview上时 才会触发onclicklistener
如果setOnTouchLisener返回true 后续的move up 也只会触发setOnTouchLisener 并且onclicklistner也不会执行[/color]
对了
[color=violet]当move触发setOnTouchLisener时 这个move不止是在TextView上 而是可以在整个activity上面[/color]
其实 这个很好理解 和[url]http://lipeng88213.iteye.com/blog/1102048[/url]
是一样的
[color=olive]1、如果TextView的setonTouchListener返回为false 也就是说TextView不出来这个事件,这时就会向上传递给onTouchEvent 并且后续的也会直接传递给onTouchEvent
反之,就表明setonTouchListener处理这个事件
2、只要加上了onClickListener 就表明TextView会处理这个事件,但是事件会首先传递给setonTouchListener 如果它返回false 就会在up的时候出发click;如果它返回true,click就不会被执行了[/color]
参考:[url]http://blog.youkuaiyun.com/tsiannian/article/details/6625999[/url]
测试代码如下:
package com.lp;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
tv.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("onTouchListener "+event.getRawX()+" "+event.getRawY());
return false;
//return true;
}
});
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("onclick");
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
System.out.println("onTouchEvent "+event.getRawX()+" "+event.getRawY());
return false;
}
}
结论:
[color=blue]1、当在TextViw上触摸时 先触发setOnTouchLisener
如果setOnTouchLisener返回false 会触发onTouchEvent 并且后续的move up都只会触发onTouchEvent
如果setOnTouchLisener返回true 后续的move up 都只会触发setOnTouchLisener
2、当在其他位置触摸时 只会触发onTouchEvent
3、如果加上onClickListener时,
如果setOnTouchLisener返回false 后续的move up都只会触发setOnTouchLisener;并且只有当up事件是在发生在textview上时 才会触发onclicklistener
如果setOnTouchLisener返回true 后续的move up 也只会触发setOnTouchLisener 并且onclicklistner也不会执行[/color]
对了
[color=violet]当move触发setOnTouchLisener时 这个move不止是在TextView上 而是可以在整个activity上面[/color]
其实 这个很好理解 和[url]http://lipeng88213.iteye.com/blog/1102048[/url]
是一样的
[color=olive]1、如果TextView的setonTouchListener返回为false 也就是说TextView不出来这个事件,这时就会向上传递给onTouchEvent 并且后续的也会直接传递给onTouchEvent
反之,就表明setonTouchListener处理这个事件
2、只要加上了onClickListener 就表明TextView会处理这个事件,但是事件会首先传递给setonTouchListener 如果它返回false 就会在up的时候出发click;如果它返回true,click就不会被执行了[/color]