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这是我一直在寻找的方法,这是一个相当优雅的方法!