Android自定义自定义ListView实现下拉刷新实现下拉刷新
首先呈上效果图
当今APP,哪个没有点滑动刷新功能,简直就太落伍了。正因为需求多,因此自然而然开源的也就多。但是若想引用开源库,
则很麻烦,比如PullToRefreshView这个库,如果把开源代码都移植到项目中,这是件很繁琐的事,如果用依赖功能的话,对
于强迫症的我,又很不爽。现在也有各种自定义ListView实现PullToRefreshListView的控件,无非就是在header加入一个控
件,通过setPadding的方式来改变显示效果。效果已经太out了,如意中发现google自带的swiperefreshlayout实现的效果挺不
错,但是我发现这个控件在部分手机上的效果不一样,估计和v7包相关。因此就有了这篇文章自定义这个喜欢的效果。
首先大概描述一下实现原理:
1、重写ListView的onTouchEvent,在方法中根据手指滑动的距离与临界值判断,决定当前的状态,分为四个状态:
RELEASE_TO_REFRESH、PULL_TO_REFRESH、REFRESHING、DONE四个状态,分别代表释放刷新、拉动刷新、正
在刷新、默认状态。
2、重写ListView的onDraw方法,根据不同的状态值,显示不同的图形表示。
3、根据滑动距离不同,显示不同的透明度、圆弧角度值、整体图形的坐标等等。
4、图形的变化分为两种:1、手动触发,滑动一点距离就更新一点坐标。比如PULL_TO_REFRESH状态,适合在
onTouchEvent中的ACTION_MOVE中触发。2、动画自动触发,比如REFRESHING状态和DONE状态,适合在
onTouchEvent中的ACTION_UP方法中触发,手指一松开就自动触发动画效果。
5、必须在设置了刷新监听器才可以滑动,否则就是一个普通的、必须在设置了刷新监听器才可以滑动,否则就是一个普通的LIstView。。
代码很简单,只有两个文件,并且有很详细的注释:
PullToRefreshListView类:
package cc.wxf.view.pull;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;