可摺疊-上下左右均可滑動-同時具有上拉加載下拉刷新

首先,上下滑動和左右滑動很好解決,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便可

這樣就一個 能夠摺疊、上下左右滑動、加載刷新的頁面就大功告成!

相關文章
相關標籤/搜索