冰川孤辰 2017-08-23
【链接】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>