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

Сенсорные экраны хорошо подходят для ввода жестов. Жестом может быть использование двух пальцев для масштабирования, прикосновение или двойное прикосновение, долгое нажатие и так далее.

libGDX предоставляет GestureDetector (исходники) класс, который позволяет вам обнаружить следующие жесты:

  • tap: пользователь прикасается к экрану и затем поднимает палец. Палец не должен выходить за пределы указанной квадратной области вокруг исходного положения для регистрации tap жеста. Многократные последовательные tap жесты будут обнаружены, если пользователь выполняет tap жест втечении заданного интервала времени.
  • pan: пользователь двигает пальцем по экрану. Детектор сообщит координаты текущего прикосновения, а также разницу между позицией текущего и предыдущего прикосновения. Используется для реализации панорамирование камеры в 2D.
  • fling: пользователь передвигал палец по экрану, а затем поднял его. Используется для реализации жеста скольжения.
  • zoom: пользователь помещает два пальца на экран и перемещает их вместе друг от друга. Детектор сообщает о начальном и текущем расстоянии между пальцами в пикселях. Используется для реализации масштабирования камеры.
  • pinch: Похож на zoom. Детектор вместо расстояния будет сообщать о первоначальном и текущем положении пальцев. Используется для реализации масштабирования камеры и более сложных жестов, таких как вращение.

GestureDetector является обработчиком событий для жестов. Для перехвата жестов в libGDX игре или приложении, можно реализовать GestureListener интерфейс и передать его в конструктор GestureDetector класса. Затем детектор устанавливается как InputProcessor, либо как InputMultiplexer или в качестве основного InputProcessor:

public class MyGestureListener implements GestureListener {

    @Override
    public boolean touchDown (int x, int y, int pointer) {
        return false;
    }

    @Override
    public boolean tap (int x, int y, int count) {
        return false;
    }

    @Override
    public boolean longPress (int x, int y) {
        return false;
    }

    @Override
    public boolean fling (float velocityX, float velocityY) {
        return false;
    }

    @Override
    public boolean pan (int x, int y, int deltaX, int deltaY) {
        return false;
    }

    @Override
    public boolean zoom (float originalDistance, float currentDistance) {
        return false;
    }

    @Override
    public boolean pinch (Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer, Vector2 secondPointer) {
        return false;
    }
}
Gdx.input.setInputProcessor(new GestureDetector(new MyGestureListener()));

GestureListener может сигнализировать о том, что он получил событие или что хочет передать его дальше следующему InputProcessor обработчику, возвращая из методов true или false соответственно.

Как и для событий, переданных обычному InputProcessor обработчику, в libGDX соответствующие методы будут вызваны в потоке визуализации перед непосредственным вызовом ApplicationListener.render() метода.

GestureDetector также имеет второй конструктор, который позволяет ему определить различные параметры для обнаружения жеста. Пожалуйста, для получения дополнительной информации обратитесь к Javadoc конструктора GestureDetector.