/**
* Touch事件
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
Log.e("666","555");
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
//按下时Y坐标
// 正在刷新不能移动
if (currentState == REFRESH) {
return true;
}
downY = (int) ev.getY();
Log.e("55555666","555");
break;
case MotionEvent.ACTION_MOVE:
int deltaY = (int) (ev.getY() - downY);
if(deltaY>0){
footerView.setPadding(0, -footerViewHeight, 0, 0);
}
int paddingTop = -headerViewHeight + deltaY;
if (paddingTop > -headerViewHeight
&& getFirstVisiblePosition() == 0) {
headerView.setPadding(0, paddingTop, 0, 0);
if (paddingTop > 0 && currentState == PULL) { //currentState当前状态下拉刷新状态
// 进入松开刷新状态
currentState = RELEASE;// RELEASE松开刷新状态
refreshHeaderView();
} else if (paddingTop <= 0 && currentState == RELEASE) {
// 进入刷新状态
currentState = PULL;
refreshHeaderView();
}
return true;// 拦截TouchMove,不让listView处理该次move事件;会造成listView无法滑动
}
break;
case MotionEvent.ACTION_UP:
if (currentState == PULL) {
headerView.setPadding(0, -headerViewHeight, 0, 0);
} else if (currentState == RELEASE) {
headerView.setPadding(0, 0, 0, 0);
currentState = REFRESH;
refreshHeaderView();
if (listener != null) {
listener.onPullrefresh();
}
}
break;
default:
break;
}
isRecored =true;
return super.onTouchEvent(ev);
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
因为下拉刷新要经过三个步骤(自己在手机上做一遍),点击屏幕(DOWN),下拉(MOVE),松开(UP),自然就会触发相应的事情,但如果你要将"下拉"和"点击"事情分开处理,应该不要在DOWN事件处理所谓的点击,而是在UP时处理。以下简陋的代码说明一下基本思路,手机不好码代码。boolean isMOVE = false; 。。。switch(..) case MOVE: isMOVE=true; ...case UP: if(!isMOVE){onClick();//处理点击事件 }else{isMOVE=false;//这是MOVE之后的UP事件,应该将记录变量重置}