Не корректное перемещение View через OnTouchListener

Есть код, который должен передвигать View элемент. Сначала он был написан просто для передвижения и работает через onTouchEvent. Код привёл ниже

float x, y;
    float dx, dy;

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        if(event.getAction() == MotionEvent.ACTION_DOWN){
            x = event.getX();
            y = event.getY();
        }

        if(event.getAction() == MotionEvent.ACTION_MOVE){
            dx = event.getX() - x;
            dy = event.getY() - y;

            btn.setX(btn.getX() + dx);
            btn.setY(btn.getY() + dy);

            x = event.getX();
            y = event.getY();
        }

        return super.onTouchEvent(event);
    }

Код работает корректно, но он не работает именно по нажатию на кнопку. После этого был написан код, который работает с кнопкой, но при его использовании кнопка начинает "дёргаться" при передвижении, возвращаясь на предыдущую позицию при движении. Код привёл ниже

float x, y;
    float dx, dy;

View.OnTouchListener listener = new View.OnTouchListener(){

        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
                x = motionEvent.getX();
                y = motionEvent.getY();
            }

            if(motionEvent.getAction() == MotionEvent.ACTION_MOVE){
                dx = motionEvent.getX() - x;
                dy = motionEvent.getY() - y;

                btn_left_shift.setX(btn_left_shift.getX() + dx);
                btn_left_shift.setY(btn_left_shift.getY() + dy);

                x = motionEvent.getX();
                y = motionEvent.getY();
            }
            return true;
        }
    }; 

В чём может быть проблема второго кода?


Ответы (0 шт):