ISwipeRefreshLayout是基于SwipeRefreshLayout源码基础上修改,便于使用自定义loading样式的下拉刷新组件。
为什么写这个组件?
原生的SwipeRefreshLayout好归好,但它不能自定义动画效果,只能简单改下color、alpha等,往往实际开发中都是自家的loading效果。所以就有了ISwipeRefreshLayout。
这里贴一个现在项目使用的loading。
还不错吧,说实话雀氏有点low。但它不是画出来了,是帧动画在切换,而且内存控制的很好,推荐下这个组件FrameAnimDrawable。
用法
和SwipeRefreshLayout几乎一样,并且适用于所有view。
xml布局
12345678910<io.jiantao.android.uikit.refresh.ISwipeRefreshLayoutandroid:id="@+id/refresh_layout"android:layout_width="match_parent"android:layout_height="wrap_content"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"/></io.jiantao.android.uikit.refresh.ISwipeRefreshLayout>代码中
|
|
实现过程
- 剔除原有效果123// 这两个类就是原生那个转的圈圈CircleImageView mCircleView;MaterialProgressDrawable mProgress;
把SwipeRefreshLayout代码爬出来,发现就这两个依赖类,剔除简单方便。
- 自定义loading123456789101112131415//定义成员变量viewprivate View mRefreshView;...//并添加设置入口public void setRefreshHeaderView(View view) {if(view == null){//为了安全,这里还应该判断下是否正在执行动画return;}removeView(mRefreshView);//移除旧的this.mRefreshView = view;view.setMinimumHeight(HEADER_VIEW_MIN_HEIGHT);addView(view);//添加新的getRefreshTrigger().init();}
以上代码很简单,暴露自定义view方法。
以上为计算和布局过程修改,下面说下滑动过程处理,更新百分比,view滑动,触发回调刷新等等。
毕竟是在源码基础上改动,整个过程还是比较简单。
感兴趣的朋友可参考修改后的代码。
最后,推荐一个动画库,效果很棒,代码简洁,本文ISwipeRefreshLayout组件可直接使用。代码在手,想怎么搞都行。
文中难免有错误之处,还望指出,欢迎评论交流。