OnTouchListener получает колеблющиеся точки касания - PullRequest
2 голосов
/ 10 ноября 2011

У меня есть действие, в котором я устанавливаю OnTouchListener для View (см. Код ниже). Он должен немного переводить представление по горизонтали, пока не активируется GestureDetector и не сделает что-то.

Код до сих пор очень прост, игнорируя множественные сенсорные события и т. Д. Я включу это позже.

getView().setOnTouchListener(new OnTouchListener() {
    private float downPos = 0;

    @Override
    public boolean onTouch(View vw, MotionEvent event)
    {
        switch (event.getActionMasked())
        {
            case MotionEvent.ACTION_DOWN:
                downPos = event.getX();
                break;
            case MotionEvent.ACTION_MOVE:
                Log.d("MyActivity", "X: " + event.getX());
                vw.setTranslationX(event.getX() - downPos);
                break;
            case MotionEvent.ACTION_UP:
                vw.setTranslationX(0);
                break;
        }

        return detector.onTouchEvent(event);
    }
});

У меня проблема в том, что события MotionEvents, которые получает слушатель, колеблются между двумя точками.

D/MyActivity(5098): X: 586.0 
D/MyActivity(5098): X: 585.0 
D/MyActivity(5098): X: 587.0 
D/MyActivity(5098): X: 586.0 
D/MyActivity(5098): X: 589.0 
D/MyActivity(5098): X: 587.0 
D/MyActivity(5098): X: 590.0 
D/MyActivity(5098): X: 588.0 
D/MyActivity(5098): X: 591.0 
D/MyActivity(5098): X: 589.0 
D/MyActivity(5098): X: 592.0 

Обратите внимание, как значения идут вверх и вниз. Поскольку я использую его для перевода вида, у меня появляется какое-то мерцание.

Я не впервые замечаю это. Я использовал ScaleGestureDetector в ImageView, чтобы масштабировать изображение один раз, когда у меня были те же проблемы.

Кто-нибудь имел такие же проблемы и мог их решить? Или это аппаратный сбой?

Мое устройство - acer A500 (Iconia Tablet)

РЕДАКТИРОВАТЬ: я проверил это на эмуляторе. У меня там тоже есть проблема. Так что это не ошибка устройства, а ошибка в Android SDK или я не правильно понимаю MotionEvents.

...