Проблемы с Android Touch - PullRequest
       25

Проблемы с Android Touch

2 голосов
/ 01 декабря 2011

У меня есть 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);
}

УказательCount всегда равен 1, независимо от того, сколько пальцев на экране.

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Вы должны возвратить true для события ACTION_DOWN в вашем OnTouchListener, если вы заинтересованы в получении уведомлений об оставшихся событиях, связанных с этим касанием (ACTION_MOVE, ACTION_UP и т. Д.)

Я бы также порекомендовал ЛЮБОЕ контролировать прикосновения, используя слушателя ИЛИ в методе onTouchEvent представления ... не оба.

НТН

0 голосов
/ 01 декабря 2011

Попробуйте записать 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 у вас может не быть ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...