Android OnTouchListener приводит к рывкам

У меня есть кнопка (переменная theButton в коде), и я хочу иметь возможность перетаскивать ее по родительскому виду. Вот его OnTouchListener:

    OnTouchListener touchBListener = new View.OnTouchListener() 
    {       
        public float offsetX;
        public float offsetY;

        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            int theAction = event.getAction();
            switch (theAction)
            {
                case MotionEvent.ACTION_DOWN:
                    // Button down
                    offsetX = theButton.getX() - event.getX();
                    offsetY = theButton.getY() - event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    // Button moved
                    float newX = event.getX() + offsetX;
                    float newY = event.getY() + offsetY;
                    v.setX(newX);
                    v.setY(newY);
                    break;
                case MotionEvent.ACTION_UP:
                    // Button up
                    break;
                default:
                    break;
            }
            return true;
        }
    };
    theButton.setOnTouchListener(touchBListener);

Когда я перетаскиваю кнопку, она перемещается в общем направлении перетаскивания, но продолжает прыгать взад и вперед между своим «текущим» местом и местом ранее в перетаскивании. Скачки больше, когда сопротивление по какой-то причине идет вверх и вправо.

Возможно ли «плавное» перетаскивание с помощью OnTouchListener или вместо этого мне нужно использовать OnDragListener?


person Don Del Grande    schedule 11.08.2013    source источник
comment
Попробуйте поместить оператор печати (т. е. log cat out) в ACTION_MOVE, который печатает newX и newY для пробного перетаскивания. Это может быть более полезным для точного определения того, что происходит. ДВИЖИТЕСЬ в постоянном направлении с постоянной скоростью   -  person ghostbust555    schedule 11.08.2013


Ответы (1)


Я нашел ответ в другом посте - когда я меняю event.getX() и event.getY() на event.getRawX() и event.getRawY(), перетаскивание становится плавным.

person Don Del Grande    schedule 24.08.2013