Android перестает перетаскивать экран из центральной точки обзора

Изображение показывает намеченный результат

Есть ли способ остановить перемещение центральной точки вида с экрана с помощью событий перемещения onTouch?

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

Ответов на этот вопрос нет нигде, поэтому мне интересно, возможно ли это вообще...

1 ответ

Решение

Вы можете использовать это, чтобы сделать ваш вид ограниченным границами экрана.

int width=v.getLayoutParams().width;;
    int height=v.getLayoutParams().height;
    switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN:

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

            return true;

        case MotionEvent.ACTION_MOVE:

            if (width == windowWidth && height == windowHeight){}
            else {
                v.animate()
                        .x(event.getRawX() + dX)
                        .y(event.getRawY() + dY)
                        .setDuration(0)
                        .start();

                if (event.getRawX() + dX + width > windowWidth) {
                    v.animate()
                            .x(windowWidth - width)
                            .setDuration(0)
                            .start();
                }
                if (event.getRawX() + dX < 0) {
                    v.animate()
                            .x(0)
                            .setDuration(0)
                            .start();
                }
                if (event.getRawY() + dY + height > windowHeight) {
                    v.animate()
                            .y(windowHeight - height)
                            .setDuration(0)
                            .start();
                }
                if (event.getRawY() + dY < 0) {
                    v.animate()
                            .y(0)
                            .setDuration(0)
                            .start();
                }

                return true;
            }

где v - представление в onTouchListener

Другие вопросы по тегам