Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android CoordinatorLayout:如何防止滚动事件到达RecyclerView?_Android_Android Coordinatorlayout - Fatal编程技术网

Android CoordinatorLayout:如何防止滚动事件到达RecyclerView?

Android CoordinatorLayout:如何防止滚动事件到达RecyclerView?,android,android-coordinatorlayout,Android,Android Coordinatorlayout,我有一个布局,由一个坐标布局父级和一个嵌套滚动视图组成,其中包含一个查看页面,其中包含一个回收视图: <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/a

我有一个布局,由一个
坐标布局
父级和一个
嵌套滚动视图
组成,其中包含一个
查看页面
,其中包含一个
回收视图

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.snap.MainActivity"
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp">

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/nested_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <android.support.constraint.ConstraintLayout
            android:id="@+id/scroll_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:id="@+id/linearLayout3"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:orientation="vertical"
                android:layout_gravity="top"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintLeft_toLeftOf="parent">

            </LinearLayout>

            </LinearLayout>

            <android.support.v4.view.ViewPager
                android:id="@+id/id_viewpager_photosvideos_albums"
                android:layout_width="match_parent"
                android:layout_height="1000dp"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/linearLayout1">

                <android.support.design.widget.TabLayout
                    android:id="@+id/id_tab_photosvideos_albums"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="top">

                    <android.support.design.widget.TabItem
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                    <android.support.design.widget.TabItem
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                </android.support.design.widget.TabLayout>


            </android.support.v4.view.ViewPager>


        </android.support.constraint.ConstraintLayout>

    </android.support.v4.widget.NestedScrollView>

    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

我希望实现以下目标:

我想截获(阻止)滚动事件到达
RecyclerView
,直到达到某个阈值条件。post,
RecyclerView
将正常开始拦截滚动事件

我怎样才能做到这一点



注意:我已尝试研究
行为。onNestedScroll()
,但这似乎不起作用。

您可以尝试此方法拦截触摸UI元素

findViewById(R.id.recyclerView).setOnTouchListener(this)
然后重写onTouch方法

 @Override
    public boolean onTouch(View view, MotionEvent motionEvent)
    {
        initialX = event.getX();
        initialY = event.getY();

        switch (motionEvent.getAction()){
            case MotionEvent.ACTION_UP:
               //
                break;
            case MotionEvent.ACTION_DOWN:
               //do something here 

                break;
        }
        return true;
    }
视图参数中,您可以检查哪个视图是触摸的或滚动的,并获得UI元素在屏幕上触摸的相对位置,然后返回
true
告诉系统我想使用此触摸事件,然后返回

false允许其他人处理触摸事件。

您可以尝试此方法拦截UI元素上的触摸

findViewById(R.id.recyclerView).setOnTouchListener(this)
然后重写onTouch方法

 @Override
    public boolean onTouch(View view, MotionEvent motionEvent)
    {
        initialX = event.getX();
        initialY = event.getY();

        switch (motionEvent.getAction()){
            case MotionEvent.ACTION_UP:
               //
                break;
            case MotionEvent.ACTION_DOWN:
               //do something here 

                break;
        }
        return true;
    }
视图参数中,您可以检查哪个视图是触摸的或滚动的,并获得UI元素在屏幕上触摸的相对位置,然后返回
true
告诉系统我想使用此触摸事件,然后返回

false让其他人处理触摸事件。

最终找到了答案-

通过像这样消费它们(在
CoordinatorLayout.Behavior
):

@覆盖
公共布尔值onStartNestedScroll(CoordinatorLayout CoordinatorLayout,NestedScrollView子级,View directTargetChild,View target,int nestedScrollAxes){
返回(嵌套滚动轴和视图兼容滚动轴垂直)!=0;
}
@凌驾
public void onNestedPreScroll(CoordinatorLayout CoordinatorLayout,NestedScrollView子视图,视图目标,int dx,int dy,int[]已使用){
int mCurrentScrollOffset=target.getScrollY();

如果(mCurrentScrollOffset最终找到了答案-

通过像这样消费它们(在
CoordinatorLayout.Behavior
):

@覆盖
公共布尔值onStartNestedScroll(CoordinatorLayout CoordinatorLayout,NestedScrollView子级,View directTargetChild,View target,int nestedScrollAxes){
返回(嵌套滚动轴和视图兼容滚动轴垂直)!=0;
}
@凌驾
public void onNestedPreScroll(CoordinatorLayout CoordinatorLayout,NestedScrollView子视图,视图目标,int dx,int dy,int[]已使用){
int mCurrentScrollOffset=target.getScrollY();

如果(mCurrentScrollOffset好吧,这是通用的。有没有过滤滚动事件的解决方案?好吧,我知道,这是可能的,但如果有一个内置的/较少涉及的方法可用,我想可能会有一个与Coordinator Layout非常流行的方法,我想我只知道这个方法,你能告诉我exa吗ct的条件或要求,你想拦截触摸回收视图我会尝试我的方法并排。看到我张贴的答案。现在,这是我一直在寻找的方法,它是一个相当优雅的一个!好吧,这是一般性的。有什么解决方案过滤滚动事件?好的,我知道,这是可能的,通过这个,但我想节省时间如果有一个内置的/较少涉及的方法可用,我怀疑可能有一个与Coordinator Layout一样受欢迎的方法我想我只知道这个方法,你能告诉我你想要拦截touch for recyclerview的确切条件或要求吗?我会并排尝试我的方法。请看我发布的答案。现在,tha这是我一直在寻找的方法,这是一个相当优雅的方法!