Android: OnTouchListener.OnTouch не вызывается в multiTouch

Я реализовал мультитач-кнопки в своем приложении, определив и прикрепив мою версию OnTouchListener (и метод onTouch) ко всем моим кнопкам. Все работает отлично, за исключением одной вещи, которая, кажется, относится к стандартному поведению слушателя. Я надеюсь, что смогу объяснить это без публикации кода, так как он длинный.

Если я нажимаю и удерживаю кнопку, метод onTouch вызывается, как и ожидалось, и приложение видит, что кнопка нажата. Если я нажимаю и удерживаю второй, метод onTouch (связанный с первой кнопкой) вызывается, как и ожидалось, и приложение видит, что кнопка нажата.

Если я отпущу только вторую, если мой палец на первой кнопке останется АБСОЛЮТНО неподвижным, событие onTouch не будет вызвано, и вторая кнопка логически не будет отпущена. Метод onTouch вызывается только в том случае, если я перемещаю первый палец хотя бы на пиксель, и только в этот момент отпускается вторая кнопка.

Я знаю, что очень сложно удерживать палец точно в одном и том же положении более одной миллисекунды :-), но иногда это случается.. Мне пришлось потратить некоторое время, чтобы понять причину такого поведения, и я не не нашел решения, есть ли у вас какие-либо предложения по решению этой проблемы? Большое тебе спасибо.


person jenergy    schedule 02.06.2012    source источник


Ответы (1)


Попробуйте это внутри вашего onTouch

PointF curr = new PointF(event.getX(), event.getY());
switch (event.getAction()) {
    case MotionEvent.ACTION_UP:
        float xDiff = Math.abs(curr.x-start.x);
        float yDiff = Math.abs(curr.y-start.y);
        if (xDiff < 5f && yDiff < 5f) {
        //insert here your code when button is click
        }
     break;

Это помогает мне избежать неточности толчка.

person Huichos    schedule 02.06.2012
comment
Привет, спасибо, но моя проблема в том, что onTouch не вызывается :-) Может быть, мне придется создать другой слушатель одного и того же класса для каждой кнопки. - person jenergy; 03.06.2012