首先,上下滑動和左右滑動很好解決,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便可
這樣就一個 能夠摺疊、上下左右滑動、加載刷新的頁面就大功告成!