首先,上下滑动和左右滑动很好解决,ViewPager+TabLayout+ListView就能很好的实现。android
最主要的是折叠 + 加载刷新:app
一.部局折叠ide
咱们能够使用CoordinatorLayout来实现,它主要的做用是布局
使用:ui
导入依赖this
implementation 'com.android.support:design:26.+'
而后在跟布局设置CoordinatorLayoutspa
<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" android:background="@drawable/gradient" tools:context=".ui.fragment.HomeFragment"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <!-设置想折叠的布局,而后添加下面的属性-!> <app:layout_scrollFlags="scroll|enterAlways"> <com.androidkun.xtablayout.XTabLayout android:id="@+id/homeFragment_tab" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorFFFFFF" app:xTabDividerWidthWidthText="true" app:xTabTextSize="20sp" app:xTabSelectedTextSize="20sp"></com.androidkun.xtablayout.XTabLayout> </android.support.design.widget.AppBarLayout> <!-设置滑动的布局,而后添加 app:layout_behavior="@string/appbar_scrolling_view_behavior"属性-!> <android.support.v4.view.ViewPager android:id="@+id/homeFragment_vp" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorFFFFFF" app:layout_behavior="@string/appbar_scrolling_view_behavior"></android.support.v4.view.ViewPager> </android.support.design.widget.CoordinatorLayout>
为了使得Toolbar有滑动效果,必须作到以下三点:
1. CoordinatorLayout做为布局的父布局容器。
2. 给须要折叠的组件设置 app:layout_scrollFlags=”scroll|enterAlways” 属性。
3. 给滑动的组件设置app:layout_behavior属性xml
2、加载刷新,我是用的是SmartRefreshLayout,前面个人博客有。须要的能够去看看接口
<?xml version="1.0" encoding="utf-8"?> <com.scwang.smartrefresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/reuse_srl" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/gray_f4" tools:context=".ui.fragment.ReuseFragment"> <!--<ListView--> <!--android:id="@+id/lv_reuse"--> <!--android:background="@color/colorFFFFFF"--> <!--android:layout_marginTop="10px"--> <!--android:layout_width="match_parent"--> <!--android:layout_height="wrap_content">--> <!--</ListView>--> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <com.guorentong.learn.organ.utils.MyListView android:id="@+id/lv_reuse" android:background="@color/colorFFFFFF" android:layout_width="match_parent" android:layout_height="wrap_content"> </com.guorentong.learn.organ.utils.MyListView> </android.support.v4.widget.NestedScrollView> </com.scwang.smartrefresh.layout.SmartRefreshLayout>
这里须要注意一点的是,你使用RecyclerView没有问题。可是使用listview使用会抢占滑动,因此咱们须要处理一下utf-8
因为CoordinatorLayout实现NestedScrollingParent接口,RecycleView实现了NestedScrollingChild接口,因此就能够在NestedScrollingChildHelper的帮助下实现滑动联动,知道了缘由这就简单了,让咱们的LIstView实现NestedScrollingChild接口
public class MyListView extends ListView implements NestedScrollingChild { private final NestedScrollingChildHelper mScrollingChildHelper; public MyListView(Context context, AttributeSet attrs) { super(context, attrs); mScrollingChildHelper = new NestedScrollingChildHelper(this); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setNestedScrollingEnabled(true); } } @Override public void setNestedScrollingEnabled(boolean enabled) { mScrollingChildHelper.setNestedScrollingEnabled(enabled); } @Override public boolean isNestedScrollingEnabled() { return mScrollingChildHelper.isNestedScrollingEnabled(); } @Override public boolean startNestedScroll(int axes) { return mScrollingChildHelper.startNestedScroll(axes); } @Override public void stopNestedScroll() { mScrollingChildHelper.stopNestedScroll(); } @Override public boolean hasNestedScrollingParent() { return mScrollingChildHelper.hasNestedScrollingParent(); } @Override public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow) { return mScrollingChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, offsetInWindow); } @Override public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) { return mScrollingChildHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow); } @Override public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) { return mScrollingChildHelper.dispatchNestedFling(velocityX, velocityY, consumed); } @Override public boolean dispatchNestedPreFling(float velocityX, float velocityY) { return mScrollingChildHelper.dispatchNestedPreFling(velocityX, velocityY); } }
须要记得在xml布局文件中,在MyListView外层嵌套一层NestedScrollView便可
这样就一个 能够折叠、上下左右滑动、加载刷新的页面就大功告成!