Прерывание жестов вверх-вниз жестами прокрутки влево и вправо

Я делаю приложение для Android, в котором я использую onScroll жесты для увеличения или уменьшения яркости при прокрутке вверх и вниз и при прокрутке слева направо Я увеличиваю и уменьшаю длительность песни onTouch на экране, когда я прокручиваю вверх и вниз по экрану, он работает нормально, но немного прерывается с прокруткой слева направо, что создает проблему. Когда я выполняю прокрутку слева направо, она работает нормально, но некоторые прерывания с жестами вверх-вниз, которые используются на сенсорном экране. Подскажите пожалуйста что мне делать????

Вот мой код

if (Math.abs(deltaX) < Math.abs(deltaY)) {
    if (Math.abs(deltaY) > SWIPE_THRESHOLD) {
        if (deltaY > leftSidelastX) {
            leftSidelastX = deltaY;
            upBrightness();
            Log.i("", "Left side Slide up");
        } else {
            leftSidelastX = deltaY;
            downBrightness();
            Log.i("", "Left side Slide down");
        }
    }
} else {
    if (Math.abs(deltaX) > SWIPE_THRESHOLD) {
        if (deltaX > leftSidelastX) {
            leftSidelastX = deltaX;
            leftScroll();
            Log.i("", "Left side Slide left");
        } else {
            leftSidelastX = deltaX;
            rightScroll();
            Log.i("", "Left side Slide right");
        }
    }
}

1 ответ

Ваша внешняя структура, если остальное - проблема. Когда вы проводите пальцем вверх и вниз и перемещаете его немного в сторону, вы автоматически останавливаете движение пальцем вверх / вниз и переходите к движению влево / вправо.

В зависимости от того, что вы хотите, вы можете либо удалить структуру If Else, когда это будет возможно сделать одновременно, либо вам нужно установить переменную, если вы в данный момент проводите пальцем вверх или вниз, установите эту переменную в начале пролистывания и всегда спрашивайте эту переменную. Чем вам нужно сбросить его при остановке смахивания.

Решение 1:

if (Math.abs(deltaY) > SWIPE_THRESHOLD) {
    if (deltaY > leftSidelastX) {
        leftSidelastX = deltaY;
        upBrightness();
        Log.i("", "Left side Slide up");
    } else {
        leftSidelastX = deltaY;
        downBrightness();
        Log.i("", "Left side Slide down");
    }
}
if (Math.abs(deltaX) > SWIPE_THRESHOLD) {
    if (deltaX > leftSidelastX) {
        leftSidelastX = deltaX;
        leftScroll();
        Log.i("", "Left side Slide left");
    } else {
        leftSidelastX = deltaX;
        rightScroll();
        Log.i("", "Left side Slide right");
    }
}

Решение 2:

Создайте переменную scroll как пустую строку в качестве переменной-члена.

if(scroll.equals("UP/DOWN"){
    if (Math.abs(deltaY) > SWIPE_THRESHOLD) {
        if (deltaY > leftSidelastX) {
            leftSidelastX = deltaY;
            upBrightness();
            Log.i("", "Left side Slide up");
        } else {
            leftSidelastX = deltaY;
            downBrightness();
            Log.i("", "Left side Slide down");
        }
    }
} else if(scroll.equals("LEFT/RIGHT")){
    if (Math.abs(deltaX) > SWIPE_THRESHOLD) {
        if (deltaX > leftSidelastX) {
            leftSidelastX = deltaX;
            leftScroll();
            Log.i("", "Left side Slide left");
        } else {
            leftSidelastX = deltaX;
            rightScroll();
            Log.i("", "Left side Slide right");
        }
    }
}else{
    if (Math.abs(deltaX) < Math.abs(deltaY)) {
        scroll = "LEFT/RIGHT";
    }else{
        scroll = "UP/DOWN";
    }
}
Другие вопросы по тегам