【问题标题】:Up down gestures interruption with left right scroll gestures上下手势中断,左右滚动手势
【发布时间】:2018-01-25 08:02:41
【问题描述】:

我正在制作一个 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");
        }
    }
}

【问题讨论】:

    标签: java android gesture


    【解决方案1】:

    您的外部 If Else 结构是问题所在。当您向上和向下滑动并稍微向一侧移动时,您会自动停止向上/向下滑动并转到向左/向右滑动。

    根据您的需要,您可以删除 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:

    创建变量滚动为空字符串作为成员变量。

    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";
        }
    }
    

    【讨论】:

    • 所以请告诉我您想要哪种解决方案以及究竟是什么问题,然后我可以尝试提供帮助。
    • 抱歉,您的两种解决方案在某些情况下都不起作用,当我向上/向下滚动时,左/右会中断。当我从初始点开始到结束点并返回初始点时,它工作正常,但是当我从开始点返回时,它会中断。
    • 实际上,我将窗口屏幕分为两部分,左半部分用于音量,右半部分用于亮度,用于上下滚动两侧,从左到右和从右到左用于歌曲持续时间,但是当我向下滚动时左侧连续如此突然从左到右是中断..提前谢谢
    • 我想做mx视频播放器,请给我一些帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多