Android-禁用将scrollview作为子级的horizontalscrollview的水平滚动

Android-禁用将scrollview作为子级的horizontalscrollview的水平滚动,android,scrollview,horizontalscrollview,Android,Scrollview,Horizontalscrollview,我现在的工作是为了禁用horizontalscrollview(id:ordermenu)的水平滚动,它将scrollview(我指的是垂直scrollview.scrollview的子级相对论的id yout:category01layout,category02layout,…)作为子级 以下是它在XML中的外观: 水平滚动视图(订单菜单) -线性布局 -滚动视图 -相对位置(类别01布局) -滚动视图 -相对位置(类别02布局) … -滚动视图 -相对位置(类别08布局) 屏幕一次显示一个

我现在的工作是为了禁用horizontalscrollview(id:ordermenu)的水平滚动,它将scrollview(我指的是垂直scrollview.scrollview的子级相对论的id yout:category01layout,category02layout,…)作为子级

以下是它在XML中的外观:

水平滚动视图(订单菜单)
-线性布局
-滚动视图
-相对位置(类别01布局)
-滚动视图
-相对位置(类别02布局)

-滚动视图
-相对位置(类别08布局)

屏幕一次显示一个类别布局,当我按下prev/next按钮时,它会设置horizontalscrollview.smoothScrollTo()以更改类别布局

因此,当我运行应用程序并滚动时,我的手指同时滚动水平滚动视图和滚动视图。但我不想让我的手指让这两个人都听到声音。我只想ScrollView听我的手指“只垂直滚动”。因为我不知道该怎么做,所以ScrollView只有在我以精确的垂直方向滚动时才能以平滑的方式垂直滚动。否则我的手指也会滚动水平滚动视图,这是我没想到的

那么有没有办法禁用水平滚动而只启用垂直滚动呢

我以前使用过这个方法(创建一个扩展HorizontalScrollView的类)

@覆盖
受保护的无效onScrollChanged(int x,int y,intoldx,intoldy){

if(Math.abs(x-oldx)在我的HorizontalScrollView子类中,我有以下方法,允许我垂直和水平滚动。基本上,如果它检测到垂直滚动,它就会放弃触摸。根据对你的响应程度,使用最小距离

 private float SWIPE_VERT_MIN_DISTANCE = 100;
 private float startlocation = 0;
    private float diffY = 0;
    private boolean vertScroll = false;

    public boolean onInterceptTouchEvent (MotionEvent ev){
        boolean ret = super.onInterceptTouchEvent(ev);



        switch(ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                startlocation = ev.getY();
                vertScroll = false;
                break;
            case MotionEvent.ACTION_MOVE:
                diffY = Math.abs(startlocation - ev.getY());
                if(diffY > SWIPE_VERT_MIN_DISTANCE)
                    vertScroll = true;
                break;
            case MotionEvent.ACTION_UP:
                break;
        }

        if(ret){
            if(vertScroll)
                return false;
            else
                return true;
        }

        return ret;
    }

在我的HorizontalScrollView子类中,我有以下方法,允许我同时垂直和水平滚动。基本上,如果它检测到垂直滚动,它将放弃触摸。根据对你的响应程度,使用最小距离

 private float SWIPE_VERT_MIN_DISTANCE = 100;
 private float startlocation = 0;
    private float diffY = 0;
    private boolean vertScroll = false;

    public boolean onInterceptTouchEvent (MotionEvent ev){
        boolean ret = super.onInterceptTouchEvent(ev);



        switch(ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                startlocation = ev.getY();
                vertScroll = false;
                break;
            case MotionEvent.ACTION_MOVE:
                diffY = Math.abs(startlocation - ev.getY());
                if(diffY > SWIPE_VERT_MIN_DISTANCE)
                    vertScroll = true;
                break;
            case MotionEvent.ACTION_UP:
                break;
        }

        if(ret){
            if(vertScroll)
                return false;
            else
                return true;
        }

        return ret;
    }

我想你真正想要的是一个简单的例子。顺便说一句,谷歌的Android开发者经常提到以下规则:

  • 不能将滚动视图放在其他滚动视图中
  • 不能将列表视图放在滚动视图中

  • 我想你真正想要的是一个简单的例子。顺便说一句,谷歌的Android开发者经常提到以下规则:

  • 不能将滚动视图放在其他滚动视图中
  • 不能将列表视图放在滚动视图中

  • 除了你的这个问题,我建议你采取一种观点

    然后将布局(单击“下一步/上一步”按钮后将更改的布局)放入其中

    现在单击“下一步”按钮时,使用动画(如右入/左出)执行viewFlipper.showNext()/viewFlipper.showPrevious()


    因此,您可以在布局上显示平滑的scrall。试试看。我是这样做的。它应该可以工作。

    除了您的这个问题之外,我建议您使用视图翻转器

    然后将布局(单击“下一步/上一步”按钮后将更改的布局)放入其中

    现在单击“下一步”按钮时,使用动画(如右入/左出)执行viewFlipper.showNext()/viewFlipper.showPrevious()


    因此,您可以在布局上显示平滑的scrall。尝试一下。我是这样做的。它应该可以工作。

    尝试使用视图切换器,在该切换器中,不需要在其他滚动视图中滚动视图,也不需要在滚动视图中滚动列表视图


    我希望您能尽快解决问题。

    尝试使用视图切换器,它不需要在其他滚动视图中滚动视图,也不需要在滚动视图中滚动列表视图


    我希望您能尽快解决问题。

    是的,因此我将代码更改为scrollview inside viewflipper。谢谢~是的,因此我将代码更改为scrollview inside viewflipper。谢谢~