Android Touch问题

时间:2011-12-01 18:42:43

标签: android touch ontouchlistener

我有一个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。

2 个答案:

答案 0 :(得分:1)

如果您有兴趣收到与该触摸相关的剩余事件(ACTION_DOWNOnTouchListener的通知,则必须在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,您可能没有。