开发者使用BGARefreshLayout-Android可以对各种控件实现多种下拉刷新效果,上拉加载更多以及配置自定义头部广告位
测试BGARefreshLayout与Activity,Fragment,ViewPager的各种嵌套的Demo
常见问题 - 加载更多视图无法显示
1.BGARefreshLayout的直接子控件的高度请使用android:layout_height =“0dp”和android:layout_weight =“1”
< CN .bingoogolapple.refreshlayout.BGARefreshLayout 的xmlns :机器人 = “ http://schemas.android.com/apk/res/android ” 机器人:ID = “ @ + ID / rl_modulename_refresh ” 机器人:layout_width = “ match_parent ” 机器人:layout_height = “ match_parent ” > <! - BGARefreshLayout的直接子控件- > < Anyview的 机器人:layout_width = “ match_parent ” 机器人:layout_height = “ 0dp ” 机器人:layout_weight = “ 1 ” /> </ cn .bingoogolapple.refreshlayout.BGARefreshLayout>
2.如果是在Fragment中使用BGARefreshLayout
请在 onCreateView 方法中初始化 BGARefreshLayout,不要在 onActivityCreated 方法中初始化
目前已经实现了四种下拉刷新效果:
- 新浪微博下拉刷新风格(可设置各种状态是的文本,可设置整个刷新头部的背景)
- 慕课网下拉刷新风格(可设置其中的标志和颜色成自己公司的风格,可设置整个刷新头部的背景)
- 美团下拉刷新风格(可设置其中的图片和动画成自己公司的风格,可设置整个刷新头部的背景)
- 类似qq好友列表黏性下拉刷新风格(三阶贝塞尔曲线没怎么调好,刚开始下拉时效果不太好,可设置整个刷新头部的背景)
一种上拉加载更多效果
- 新浪微博上拉加载更多(可设置背景,状态文本)
开发者也可以继承BGARefreshViewHolder这个抽象类,实现相应地抽象方法做出各式各样的下拉刷新效果【例如实现handleScale(float scale,int moveYDistance)方法,根据scale实现各种下拉刷新动画】和上拉加载更多特效,可参考BGAMoocStyleRefreshViewHolder,BGANormalRefreshViewHolder,BGAStickinessRefreshViewHolder,BGAMeiTuanRefreshViewHolder的实现方式。
目前存在的问题
- 当配置自定义头部广告位可滚动时,内容区域和广告位还不能平滑过度。
- 当BGAStickyNavLayout中嵌套RecyclerView或AbsListView,并且第一页的最后一个项目刚好在最底部时,加载更多视图会悬浮在最后一个项目上面
- 正在刷新或加载更多时,用户上下滑动不会让下拉刷新视图和加载更多视图跟着滑动
效果图
基本使用
1.添加Gradle依赖
没有支持Eclipse,建议还在用Eclipse的小伙伴都开始转Android Studio吧
latestVersion是指对应库的最新版本号,别再问我为什么找不到xxxxxxxlatestVersion了!
依赖{ 编译' com.android.support:recyclerview-v7:latestVersion ' 编译' com.android.support:appcompat-v7:latestVersion ' 编译' cn.bingoogolapple:BGA-refreshlayout:latestVersion @ AAR ' }
2.在布局文件中添加BGARefreshLayout
注意:内容控件的高度请使用android:layout_height =“0dp”和android:layout_weight =“1”
< CN .bingoogolapple.refreshlayout.BGARefreshLayout 的xmlns :机器人 = “ http://schemas.android.com/apk/res/android ” 机器人:ID = “ @ + ID / rl_modulename_refresh ” 机器人:layout_width = “ match_parent ” 机器人:layout_height = “ match_parent ” > <! -内容控件- > < Anyview的 机器人:layout_width = “ match_parent ” 机器人:layout_height = “ 0dp ” 机器人:layout_weight = “ 1 ” /> </ cn .bingoogolapple.refreshlayout.BGARefreshLayout>
3.在活动或片段中配置BGARefreshLayout
//让活动或者片段实现BGARefreshLayoutDelegate接口 public class ModuleNameActivity 扩展 AppCompatActivity 实现了 BGARefreshLayout。BGARefreshLayoutDelegate { private BGARefreshLayout mRefreshLayout; @Override 保护 无效的 onCreate(Bundle savedInstanceState){ 超级。的onCreate(savedInstanceState); 的setContentView(ř 。布局。 activity_moudlename); initRefreshLayout(); } private void initRefreshLayout(BGARefreshLayout refreshLayout){ mRefreshLayout =(BGARefreshLayout)findViewById(ř 。 ID 。 rl_modulename_refresh); //为BGARefreshLayout设置代理 mRefreshLayout 。setDelegate(this); //设置下拉刷新和上拉加载更多的风格参数1:应用程序上下文,参数2:是否具有上拉加载更多功能 BGARefreshViewHolder refreshViewHolder = new XXXImplRefreshViewHolder(this,true)) //设置下拉刷新和上拉加载更多的风格 mRefreshLayout 。setRefreshViewHolder(refreshViewHolder); //为了增加下拉刷新头部和加载更多的通用性,提供了以下可选配置选项------------- START //设置正在加载更多时不显示加载更多控件 // mRefreshLayout.setIsShowLoadingMoreView(false); //设置正在加载更多时的文本 refreshViewHolder。setLoadingMoreText(loadingMoreText); //设置整个加载更多控件的背景颜色资源id refreshViewHolder。setLoadMoreBackgroundColorRes(loadMoreBackgroundColorRes); //设置整个加载更多控件的背景drawable资源ID refreshViewHolder。setLoadMoreBackgroundDrawableRes(loadMoreBackgroundDrawableRes); //设置下拉刷新控件的背景颜色资源id refreshViewHolder。setRefreshViewBackgroundColorRes(refreshViewBackgroundColorRes); //设置下拉刷新控件的背景drawable资源id refreshViewHolder 。setRefreshViewBackgroundDrawableRes(refreshViewBackgroundDrawableRes); //设置自定义头部视图(也可以不用设置)参数1:自定义头部视图(例如广告位),参数2:上拉加载更多是否可用 mRefreshLayout 。setCustomHeaderView(mBanner,false); //可选配置------------- END } @覆盖 公共 空隙 onBGARefreshLayoutBeginRefreshing(BGARefreshLayout refreshLayout){ //在这里加载最新数据 if(mIsNetworkEnabled){ //如果网络可用,则加载网络数据 new AsyncTask < Void,Void,Void >(){ @覆盖 保护 虚空 doInBackground(虚空 ...... PARAMS){ 尝试 { 主题。睡眠(MainActivity 。 LOADING_DURATION); } 捕获(InterruptedException的发送){ e 。的printStackTrace(); } 返回 null ; } @覆盖 保护 空隙 onPostExecute(空隙 避免){ //加载完毕后在UI线程结束下拉刷新 mRefreshLayout 。endRefreshing(); mDatas 。的addAll(0,DataEngine 。 loadNewData()); mAdapter 。setDatas(mDatas); } } 。执行(); } else { //网络不可用,结束下拉刷新 Toast 。makeText(此,“网络不可用”,吐司。 LENGTH_SHORT)。显示(); mRefreshLayout 。endRefreshing(); } } @覆盖 公共 布尔 onBGARefreshLayoutBeginLoadingMore(BGARefreshLayout refreshLayout){ //在这里加载更多数据,或者更具产品需求实现上拉刷新也可以 if(mIsNetworkEnabled){ //如果网络可用,则异步加载网络数据,并返回true,显示正在加载更多 新的 AsyncTask < Void,Void,Void >(){ @覆盖 保护 虚空 doInBackground(虚空 ...... PARAMS){ 尝试 { 主题。睡眠(MainActivity 。 LOADING_DURATION); } 捕获(InterruptedException的发送){ e 。的printStackTrace(); } 返回 null ; } @覆盖 保护 空隙 onPostExecute(空隙 避免){ //加载完毕后在UI线程结束加载更多 mRefreshLayout 。endLoadingMore(); mAdapter 。addDatas(DataEngine 。 loadMoreData()); } } 。执行(); 返回 true ; }
资源均来自第三方,谨慎下载,前往第三方网站下载