Android 中的 onTouch 和 onTouchEvent 方法
onTouch and onTouchEvent methods in Android
我用'onTouch'方法写成下面这样。
但是 'getPointerCount()' 和 'getAction()' 始终输出相同的值。
此代码无法识别多点触控。
并且 'onTouch' 方法在 MotionEvent.ACTION_UP 发生时不被调用。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
relativelayout = (RelativeLayout) findViewById(R.id.relativeLayout);
relativelayout.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Log.i("test", "multiTouchCount : " + event.getPointerCount());
Log.i("test", "action : " + event.getAction());
return false;
}
});
}
所以,我用 onTouchEvent 方法尝试了同样的事情,这很有效。
public boolean onTouchEvent(MotionEvent event) {
Log.i("test", "multiTouchCount : " + event.getPointerCount());
Log.i("test", "action : " + event.getAction());
return super.onTouchEvent(event);
}
'onTouch' 方法有什么问题?
在Listener的onTouch()
方法中,你无条件returnfalse
,导致View在第一个ACTION_DOWN
事件后不再接收触摸事件,直到 ACTION_DOWN
再次发生。
如果要保证View持续接收多点触摸事件,returntrue
无条件
我用'onTouch'方法写成下面这样。
但是 'getPointerCount()' 和 'getAction()' 始终输出相同的值。
此代码无法识别多点触控。
并且 'onTouch' 方法在 MotionEvent.ACTION_UP 发生时不被调用。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
relativelayout = (RelativeLayout) findViewById(R.id.relativeLayout);
relativelayout.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Log.i("test", "multiTouchCount : " + event.getPointerCount());
Log.i("test", "action : " + event.getAction());
return false;
}
});
}
所以,我用 onTouchEvent 方法尝试了同样的事情,这很有效。
public boolean onTouchEvent(MotionEvent event) {
Log.i("test", "multiTouchCount : " + event.getPointerCount());
Log.i("test", "action : " + event.getAction());
return super.onTouchEvent(event);
}
'onTouch' 方法有什么问题?
在Listener的onTouch()
方法中,你无条件returnfalse
,导致View在第一个ACTION_DOWN
事件后不再接收触摸事件,直到 ACTION_DOWN
再次发生。
如果要保证View持续接收多点触摸事件,returntrue
无条件