当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;
}}
});
我正在尝试实现类似于 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;
}}
});