移动开发Android知识Android技术知识

SwipeRefreshLayout 嵌套ViewPager左右

2016-11-17  本文已影响0人  LXC_Brian宣材

之前新项目里需要用到下拉刷新,懒得用第三方,然后想到的是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;

}

}

然后布局中使用自定义的类就行了
上一篇 下一篇

猜你喜欢

热点阅读