Как я могу перемещать объект по экрану, перетаскивая Android? - PullRequest
0 голосов
/ 16 февраля 2020

Так что в моем макете у меня есть этот шар, который я хочу перетащить по экрану. Я попытался использовать метод onTouch (), и вот мои результаты:
1) ((Button)findViewById(R.id.ball)).setY(event.getY());
((Button)findViewById(R.id.ball)).setX(event.getX());
Этот по какой-то причине очень сбойный. Я пытаюсь переместить шар, и он просто быстро перемещается назад и вперед между двумя разными местами.
2) ((Button)findViewById(R.id.ball)).setY(event.getRawY());
((Button)findViewById(R.id.ball)).setX(event.getRawX());
Этот работает немного плавнее, но когда я начинаю движение, Мяч просто телепортируется в другое место. Он отлично работает, за исключением той части, где он «телепортируется»

Чего я хочу добиться:
Нормальное движение перетаскивания мяча, где шар находится прямо под пальцем (координаты x и y мяча сопоставьте координаты x и y касания)

При необходимости я могу добавить экранные записи, поясняющие два приведенных выше случая

1 Ответ

0 голосов
/ 16 февраля 2020

Сначала заставьте ваше занятие реализовать View.OnTouchListener и импортируйте запрошенный метод:

public class MyActivity extends AppCompatActivity implements View.OnTouchListener {}

Затем измените только что созданный метод onTouch, как показано ниже:

float dX, dY;

@Override
public boolean onTouch(View view, MotionEvent event) {

switch (event.getAction()) {

    case MotionEvent.ACTION_DOWN:

        dX = view.getX() - event.getRawX();
        dY = view.getY() - event.getRawY();
        break;

    case MotionEvent.ACTION_MOVE:

        view.animate()
                .x(event.getRawX() + dX)
                .y(event.getRawY() + dY)
                .setDuration(0)
                .start();
        break;
    default:
        return false;
}
return true;
}

и, наконец, установите это onTouch метод на ваш взгляд:

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