当gridview不在顶部时如何展开appbarlayout

how to uncollapse appbarlayout when gridview is not at the top

我正在尝试实现类似于 instagram 的图库模块,其中包含图像的 gridview 将独立滚动,但如果我触摸 appbarlayout 滚动 gridview 时,它应该开始向上滚动。我能够通过 setnestedscrollview 实现它,但是当 appbarlayout 折叠时,它不会展开,直到我将画廊带到 top.so 我不知道如何在 gridview 不在起点时触摸工具栏时展开 appbar 布局但 between.here 的某处是我的 xml

    <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:id="@+id/coordinator"
        android:focusableInTouchMode="false"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    <GridView
            android:layout_below="@+id/iv"
            android:id="@+id/gridView"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:columnWidth="100dp"

            android:drawSelectorOnTop="true"
            android:gravity="center"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:numColumns="5"
            android:stretchMode="columnWidth"
            android:verticalSpacing="5dp"
   android:focusable="true"
            android:clickable="true"/>
    <android.support.design.widget.AppBarLayout
            android:id="@+id/app_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:animateLayoutChanges="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            android:fitsSystemWindows="true">
    <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsing_toolbar"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:animateLayoutChanges="true"
                app:layout_scrollFlags="scroll|exitUntilCollapsed"
    app:expandedTitleMarginStart="48dp"
                app:expandedTitleMarginEnd="64dp"
                android:fitsSystemWindows="true">
     <ImageView
                    android:id="@+id/image"
                    android:src="@drawable/pup"
                    android:layout_width="match_parent"
                    android:layout_height="400dp"
                    android:scaleType="centerCrop"
                    android:adjustViewBounds="true"
                    android:fitsSystemWindows="true"

                  />
    <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    app:layout_collapseMode="pin"
                    android:background="@android:color/transparent"
                    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                    />
  </android.support.design.widget.CollapsingToolbarLayout>
  </android.support.design.widget.AppBarLayout>

这里是我如何实现 nestedscrollview

    gridView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                int y = (int)motionEvent.getRawY();
        if(y<=h)
                {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        gridView.setNestedScrollingEnabled(true);
        }
                    else{

                    }
                }
                else
                {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        gridView.setNestedScrollingEnabled(false);
                        }
                    else
                    {
                         }}
return false;
            }
        });

经过大量搜索后,我开始关注 solution.in xml 网格视图必须在 appbarlayout 之后放置在嵌套滚动视图中。

<android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:fillViewport="true"
        android:id="@+id/nsv">
        <GridView
            android:layout_below="@+id/iv"
            android:id="@+id/gridView"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:columnWidth="100dp"
            android:drawSelectorOnTop="true"
            android:gravity="center"
            android:numColumns="3"
            android:stretchMode="columnWidth"
            android:verticalSpacing="5dp"
            android:focusable="true"
            android:clickable="true"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />
    </android.support.v4.widget.NestedScrollView>

并在触摸网格时-

int flag=1,flag2=0;
 gridView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    v.getParent().requestDisallowInterceptTouchEvent(true);}
                if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
                    int y = (int) motionEvent.getRawY();
                    if (flag == 1) {
                        if (y <= h) {
                            v.getParent().requestDisallowInterceptTouchEvent(false);
                            boolean fullyExpanded = (appBarLayout.getHeight() - appBarLayout.getBottom()) == 0;
                            if (fullyExpanded) {
                                flag2=0;
                            }
                            else
                            {flag2=1;
                                v.getParent().requestDisallowInterceptTouchEvent(true);
                                if(gridView.getChildAt(0).getTop()==0)
                                {
                                    v.getParent().requestDisallowInterceptTouchEvent(false);
                                }
                                else
                                {
                                    v.getParent().requestDisallowInterceptTouchEvent(true);}}}
                        else
                        {
                            v.getParent().requestDisallowInterceptTouchEvent(true);
                            flag2=0;}
                    }}
                if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                    v.getParent().requestDisallowInterceptTouchEvent(true);
                }
                return false;
            }});

并切换 coordinatorlayout 的触摸-

coordinatorLayout.setOnTouchListener(new View.OnTouchListener() {
           @Override
           public boolean onTouch(View view, MotionEvent motionEvent) {
               boolean fullyExpanded = (appBarLayout.getHeight() - appBarLayout.getBottom()) == 0;
               if(flag2==0&&fullyExpanded)
                   return  true;
               else{
                   flag2=0;
               return false;
           }}
       });