SuperSwipeRefreshLayout
一個功能強大的自己定義下拉刷新組件。
Why?
下拉刷新這樣的控件。想必大家用的太多了,比方使用非常多的XListView等。
近期。項目中非常多列表都是使用ReyclerView實現的。取代了原有的ListView,原有下拉刷新方式遭到挑戰。本來Google推出的SwipeRefreshLayout已經能夠滿足大部分的需求了。
然而,因為其定制性較差。下拉刷新的樣式無法改動。並且被嵌套的View也無法尾隨手指的滑動而滑動。基於以上考慮,定制自己強大的SuperSwipeRefreshLayout。
Feature
- 非侵入式。對原來的ListView、RecyclerView沒有不論什么影響,使用方法和SwipeRefreshLayout相似。
- 可自己定義頭部View的樣式。調用setHeaderView方法就可以
- 支持很多其它:RecyclerView,ListView,ScrollView。GridView等等。
- 被包括的View(RecyclerView,ListView etc.)可尾隨手指的滑動而滑動
默認是尾隨手指的滑動而滑動。也能夠設置為不尾隨:setTargetScrollWithLayout(false) - 回調方法很多其它
比方:onRefresh() onPullDistance(int distance)和onPullEnable(boolean enable)
開發者能夠依據下拉過程中distance的值做一系列動畫。
How to use
step 1
<net.mobctrl.views.SuperSwipeRefreshLayout android:id="@+id/swipe_refresh" android:layout_width="match_parent" android:layout_height="match_parent" >
<android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" />
</net.mobctrl.views.SuperSwipeRefreshLayout>
step 2
swipeRefreshLayout = (SuperSwipeRefreshLayout) findViewById(R.id.swipe_refresh);
swipeRefreshLayout.setHeaderView(createHeaderView());// add headerView
swipeRefreshLayout
.setOnPullRefreshListener(new OnPullRefreshListener() {
@Override
public void onRefresh() {
//TODO 開始刷新
}
@Override
public void onPullDistance(int distance) {
//TODO 下拉距離
}
@Override
public void onPullEnable(boolean enable) {
//TODO 下拉過程中,下拉的距離是否足夠出發刷新
}
});
step 3
- create your header view
swipeRefreshLayout.setHeaderView(createHeaderView());// add headerView
/** * create Header View */
private View createHeaderView(){
//TODO 創建下拉刷新頭部的View樣式
}
跟手滑動設置
- setTargetScrollWithLayout(false/true);//default true
swipeRefreshLayout.setTargetScrollWithLayout(true);
Support View
- RecyclerView.
- ListView
- SrcollView
- GridView
- etc.
Demo
效果
興許
如有必要,能夠添加上拉載入很多其它的功能。
源代碼:
Github https://github.com/nuptboyzhb/SuperSwipeRefreshLayout
源代碼分析
興許有時間更新