Как получить положение Touch в андроиде?

Мне нужно получить начальную позицию касания (X, Y), коснуться позиции перемещения и коснуться конечной позиции экрана в андроиде.

Ответ 1

@Override
public boolean onTouchEvent(MotionEvent event)
{
    int x = (int)event.getX();
    int y = (int)event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_UP:
    }

    return false;
}

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

Ответ 2

Дополнительный ответ

Учитывая OnTouchListener

private View.OnTouchListener handleTouch = new View.OnTouchListener() {

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

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

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Log.i("TAG", "touched down");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.i("TAG", "moving: (" + x + ", " + y + ")");
                break;
            case MotionEvent.ACTION_UP:
                Log.i("TAG", "touched up");
                break;
        }

        return true;
    }
};

установить на какой-то вид:

myView.setOnTouchListener(handleTouch);

Это дает вам координаты события касания относительно вида, которому назначен слушатель касания. Верхний левый угол обзора (0, 0). Если вы проведете пальцем над видом, то y будет отрицательным. Если вы переместите палец влево от вида, то x будет отрицательным.

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

Если вы хотите координаты относительно верхнего левого угла экрана устройства, используйте необработанные значения.

int x = (int)event.getRawX();
int y = (int)event.getRawY();

связанные с

Ответ 3

@Override
    public boolean onTouch(View v, MotionEvent event) {
       float x = event.getX();
       float y = event.getY();
       return true;
    }

Ответ 4

Вы можете реализовать дедуктор Gesture, и в своем onfling-событии вы получите два параметра из класса MotionEvent. Вы можете получить от них координаты x и y. Обратите внимание на это сообщение для более подробной информации

Обнаружение жестов при перемещении по сетке

Ответ 5

Вот стиль Колтина, я использую его в своем проекте, и он работает очень хорошо:

this.yourview.setOnTouchListener(View.OnTouchListener { _, event ->
        val x = event.x
        val y = event.y

        when(event.action) {
            MotionEvent.ACTION_DOWN -> {
                Log.d(TAG, "ACTION_DOWN \nx: $x\ny: $y")
            }
            MotionEvent.ACTION_MOVE -> {
                Log.d(TAG, "ACTION_MOVE \nx: $x\ny: $y")
            }
            MotionEvent.ACTION_UP -> {
                Log.d(TAG, "ACTION_UP \nx: $x\ny: $y")
            }
        }
        [email protected]  true
    })