之前新项目里需要用到下拉刷新,懒得用第三方,然后想到的是SwipeRefreshLayout,于是就开干
这样还好,但是很早以前就注意到一个问题,就是SwipeRefreshLayout对于Touch时间处理有点问题,导致在SwipeRefreshLayout里面嵌套ViewPager等左右滑动的控件之后,左右滑必须要时水平方向,稍有偏差就会触发下拉刷新,所以。。这样的效果坑定是过不了关的。然后进源码,寻找Touch事件好像有点复杂,既然人家写好了,就不管他了,我们只要控制它触发条件就好,于是,自己自定义了一个类来继承它,然后从写方法
继承SwipeRefreshLayout之后重写onInterceptTouchEvent()方法,对时间进行判断来控制是否调用父类,就这样就解决了SwipeRefreshLayout 嵌套ViewPager左右滑动问题
下面贴段代码:
public classLXC_SwipeRefreshLayoutextendsSwipeRefreshLayout {
publicLXC_SwipeRefreshLayout(Context context,AttributeSet attrs) {
super(context,attrs);
}
publicLXC_SwipeRefreshLayout(Context context) {
super(context);
}
floatY=0;
floatX=0;
@Override
public booleanonInterceptTouchEvent(MotionEvent ev) {
final intaction = MotionEventCompat.getActionMasked(ev);
switch(action) {
caseMotionEvent.ACTION_DOWN:
Y= ev.getRawY();
X=ev.getRawX();
return super.onInterceptTouchEvent(ev);
caseMotionEvent.ACTION_MOVE:
if((ev.getRawX()-X)>0) {
//右划
if((ev.getRawX() -X) > (ev.getRawY() -Y)) {
return false;
}else{
return super.onInterceptTouchEvent(ev);
}
}else{
//左划
if(X-(ev.getRawX()) > (ev.getRawY() -Y)) {
return false;
}else{
return super.onInterceptTouchEvent(ev);
}
}
caseMotionEvent.ACTION_UP:
Y=0;
X=0;
return super.onInterceptTouchEvent(ev);
}
return false;
}
}
然后布局中使用自定义的类就行了
网友评论