美文网首页移动开发Android知识Android技术知识
SwipeRefreshLayout 嵌套ViewPager左右

SwipeRefreshLayout 嵌套ViewPager左右

作者: LXC_Brian宣材 | 来源:发表于2016-11-17 10:58 被阅读0次

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

    }

    }

    然后布局中使用自定义的类就行了

    相关文章

      网友评论

        本文标题:SwipeRefreshLayout 嵌套ViewPager左右

        本文链接:https://www.haomeiwen.com/subject/oxrdpttx.html