当兄弟滚动到达结尾时打开底部?

时间:2018-02-23 01:12:01

标签: java android android-coordinatorlayout bottom-sheet

有没有办法去"转发"将事件从一个滚动视图滚动到我的底部工作表,以便在我滚动第一个滚动视图时我的底部工作表开始展开?

考虑这个小应用程序:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int peekHeight = getResources().getDimensionPixelSize(R.dimen.bottom_sheet_peek_height); // 96dp

        View bottomSheet = findViewById(R.id.bottomSheet);
        BottomSheetBehavior<View> behavior = BottomSheetBehavior.from(bottomSheet);
        behavior.setPeekHeight(peekHeight);
    }
}
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- LinearLayout holding children to scroll through -->

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

    <View
        android:id="@+id/bottomSheet"
        android:layout_width="300dp"
        android:layout_height="400dp"
        android:layout_gravity="center_horizontal"
        app:layout_behavior="android.support.design.widget.BottomSheetBehavior"/>

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

开箱即用,这很好用。我看到96pp的底页,我可以照常上下滑动。另外,我可以看到我的滚动内容,我可以正常上下滚动。

enter image description here enter image description here enter image description here

让我们假设我处于第二张图片中显示的状态。我的NestedScrollView一直滚动到底部,我的底部工作表已折叠。我希望能够在NestedScrollView上向上滑动( not 在底部工作表上),并且由于它无法再向前滚动,请使用该滑动手势而不是被发送到底部工作表,以便它开始扩展。基本上,让应用程序的行为就好像我的手势已在底部工作表上执行,而不是滚动视图。

我的第一个想法是查看NestedScrollView.OnScrollChangeListener,但我无法使其工作,因为它停止在滚动内容的边界处被触发(毕竟,它会侦听滚动改变,当你处于边缘时没有任何改变。

我还看了一下创建我自己的BottomSheetBehavior子类并尝试覆盖onInterceptTouchEvent(),但在两个地方遇到了麻烦。首先,我只想在兄弟滚动视图位于底部时捕获事件,我可以这样做,但我现在正在捕获所有事件(使得无法向后滚动兄弟)。其次,private内的mIgnoreEvents字段BottomSheetBehavior阻止了底层实际扩展。我可以使用反射来访问这个字段并防止它阻挡我,但这感觉很邪恶。

编辑:我花了一些时间研究AppBarLayout.ScrollingViewBehavior,因为这似乎非常接近我想要的(它将一个视图上的滑动转换为另一个视图上的滑动),但这似乎是手动设置偏移逐个像素,底部表格不那么表现。

0 个答案:

没有答案