我有一个SurfaceView,我想识别MotionEvent Action_Up,但只触发了Action_Down事件。此外,我想识别另一个触摸,而第一个手指仍然在屏幕上,但OnTouch事件不会再次触发。
@Override
public boolean onTouch(View arg0, MotionEvent event) {
int pointerCount = event.getPointerCount();
if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
//blabla
} else /* if (event.getAction() == android.view.MotionEvent.ACTION_UP) */{
//blabla
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int pointerCount = event.getPointerCount();
if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
//blabla
} else /* if (event.getAction() == android.view.MotionEvent.ACTION_UP) */{
//blabla
}
return super.onTouchEvent(event);
}
无论屏幕上有多少手指,pointerCount始终为1。
答案 0 :(得分:1)
如果您有兴趣收到与该触摸相关的剩余事件(ACTION_DOWN
,OnTouchListener
的通知,则必须在ACTION_MOVE
中为ACTION_UP
事件返回true,等)
我还建议使用监听器监视触摸,或者在视图的onTouchEvent
方法中监控触摸...不是两者都有。
HTH
答案 1 :(得分:0)
尝试在变量中捕获getAction,而不是在onTouch中多次调用它。还要确保在操作消耗时让听众知道。
public boolean onTouch(View v, MotionEvent event) {
final int action = event.getAction();
boolean consumed = false;
switch(action){
case MotionEvent.ACTION_DOWN:
//down stuff logic
consumed = true;
break;
case MotionEvent.ACTION_UP:
//up stuff logic
consumed = true;
break;
case MotionEvent.ACTION_MOVE:
//move stuff logic
consumed = true;
break;
}
return consumed;
}
至于屏幕上的手指数量,请记住在API级别5启动多点触控支持,因此根据您的手机/ minSDK,您可能没有。