Как получить позицию Touch в Android? - PullRequest
82 голосов
/ 13 августа 2010

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

Ответы [ 5 ]

152 голосов
/ 13 августа 2010
@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;
}

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

20 голосов
/ 20 сентября 2016

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

Учитывая 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();

Относящиеся

11 голосов
/ 13 августа 2010
@Override
    public boolean onTouch(View v, MotionEvent event) {
       float x = event.getX();
       float y = event.getY();
       return true;
    }
0 голосов
/ 29 января 2019

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

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")
            }
        }
        return@OnTouchListener  true
    })
0 голосов
/ 13 августа 2010

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

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

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