android中的两个嵌套垂直滚动视图

android中的两个嵌套垂直滚动视图,android,android-scrollview,Android,Android Scrollview,我使用两个垂直滚动视图(例如,父视图和子视图)。问题是我不能滚动我的子视图,而是滚动我的整个父视图,是否有任何方法可以限制我的父视图在滚动我的子视图时滚动,反之亦然 需要帮助…提前谢谢 试试这个 注:此处parentScrollView表示外部ScrollView,childScrollView表示内部ScrollView parentScrollView.setOnTouchListener(new View.OnTouchListener() { @Override

我使用两个垂直滚动视图(例如,父视图和子视图)。问题是我不能滚动我的子视图,而是滚动我的整个父视图,是否有任何方法可以限制我的父视图在滚动我的子视图时滚动,反之亦然


需要帮助…提前谢谢

试试这个

注:此处parentScrollView表示外部ScrollView,childScrollView表示内部ScrollView

parentScrollView.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
        Log.v(TAG, "PARENT TOUCH");

        findViewById(R.id.child_scroll).getParent()
                .requestDisallowInterceptTouchEvent(false);
        return false;
    }
});

childScrollView.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
        Log.v(TAG, "CHILD TOUCH");

        // Disallow the touch request for parent scroll on touch of  child view
        v.getParent().requestDisallowInterceptTouchEvent(true);
        return false;
    }
});

您需要处理触摸事件才能有效地执行此操作

        outerScrollView.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                findViewById(R.id.inner_scroll).getParent()
                        .requestDisallowInterceptTouchEvent(false);
                return false;
            }
        });

        innerScrollView.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                v.getParent().requestDisallowInterceptTouchEvent(true);
                return false;
            }
        });

-以下是您可以通过描述找到的解决方案

//对于所有子滚动内容,我们必须遵循上面的说明 我


这两种方法可以解决您的问题。

这有助于更好地理解:

childScrollView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {

                    int action = event.getAction();
                    switch (action) {
                        case MotionEvent.ACTION_DOWN:
                            // Disallow ScrollView to intercept touch events.
                            parentScrollV.requestDisallowInterceptTouchEvent(true);

                            break;

                        case MotionEvent.ACTION_UP:
                            // Allow ScrollView to intercept touch events.
                            parentScrollV.requestDisallowInterceptTouchEvent(false);

                            break;
                    }
                    return false;
                }
            });

尽管此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。@BrianWhite感谢您的建议,是的,您的观点是正确的。“findViewById(R.id.inner_scroll)。getParent()表示“parentScrollView”
childScrollView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {

                    int action = event.getAction();
                    switch (action) {
                        case MotionEvent.ACTION_DOWN:
                            // Disallow ScrollView to intercept touch events.
                            parentScrollV.requestDisallowInterceptTouchEvent(true);

                            break;

                        case MotionEvent.ACTION_UP:
                            // Allow ScrollView to intercept touch events.
                            parentScrollV.requestDisallowInterceptTouchEvent(false);

                            break;
                    }
                    return false;
                }
            });