【链接】Android智能下拉刷新框架-SmartRefreshLayout
http://blog.csdn.net/yunyu5120/article/details/74451961
使用SmartRefreshLayout控件,可实现最先进的几种牛逼的加载和刷新效果
最原始的效果:
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/mRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
//加了这个,就是下拉刷新最初头部效果了
<com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RecyclerView android:id="@+id/mRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
//这个是底部上拉加载的效果了,
<com.scwang.smartrefresh.layout.footer.ClassicsFooter
android:id="@+id/mClassicsFooter"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
代码实现:
private RefreshLayout refreshLayout;
refreshLayout=(RefreshLayout)findViewById(R.id.mSwipeRefreshLayout);
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
//刷新
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
currpage = 1;
//结束后停止刷新
refreshData();
}
}, 100);
refreshlayout.finishRefresh(1000);
}
});
refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
@Override
public void onLoadmore(final RefreshLayout refreshlayout) {
refreshlayout.finishLoadmore(1000);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
switch (status) {
case 0:
currpage++;
new StartAsyncTask().execute("initPostInfo");
mAdapter.setNewData(mDetailList);
mAdapter.loadMoreComplete();
break;
case 1:
currpage++;
new StartAsyncTask().execute("initPostInfo");
mAdapter.setNewData(mDetailList);
mAdapter.loadMoreEnd();
break;
case 2:
mAdapter.loadMoreFail();
break;
}
}
}, 100);
}
});
如果头部和底部,不用这样的效果,可以去掉,然后自己设置想要的效果,如果项目没特别要求,这样的效果已经满足了大多数的功能需求了
也可以设置全局的效果
这样就可以实现整个项目的下拉效果
public class MyApp extends Application{
static {//static 代码段可以防止内存泄露
//设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
// return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate);//平行移动 特点: 最常见,HeaderView高度不会改变,
// return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.FixedBehind);//固定在后面 特点:不会上下移动,HeaderView高度不会改变(类似微信浏览器效果)
// return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.FixedFront);//固定在前面 特点:不会上下移动,HeaderView高度不会改变
return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Scale);//拉伸形变 特点:在下拉和上弹(HeaderView高度改变)时候,会自动触发OnDraw事件
}
});
//设置全局的Footer构建器
SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
//指定为经典Footer,默认是 BallPulseFooter
// return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Translate);
// return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.FixedBehind);
// return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.FixedFront);
return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Scale);
}
});
}
@Override
public void onCreate() {
super.onCreate();
}
}
下面这个布局可以实现列表添加一个头部广告位,
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/mRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
<pl.droidsonroids.gif.GifImageView
android:layout_width="match_parent"
android:layout_height="150dp"
android:scaleType="centerCrop"
android:src="@mipmap/gif_header_repast"/>
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
android:text="我就是boos要求加上的广告条啦"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/mRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>