Android 给大家分享一个解决ViewPager和Scrollview滑动冲突的工具类

Viewpager和Scollview是官方给我们带来的滑动控件,可以说在项目中是不可缺少的,使用简单但是也困扰了很多人 。

主要出现的问题有:

1.ViewPager左右不能滑动

2.如果在水平方向上的偏移量较垂直方向上的偏移量不是太大的时候,会有明显的ScrollView滚动问题

            首先我们要明确,这是滑动带来的问题,那我们就从滑动入手,最好的办法就是使用view事件分发机制来解决,我用的是事件分发的onTouchEvent处理事件,监听手指按下的时候,每次操作只分发一个事件。

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.MotionEvent;

public class MyViewPager extends ViewPager{
    float curX = 0f;
    float downX = 0f;
    OnSingleTouchListener onSingleTouchListener;
    public MyViewPager(Context context) {
        super(context);
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        curX = ev.getX();
        // TODO Auto-generated method stub  
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            downX = curX;
        }
        int curIndex = getCurrentItem();
        if (curIndex == 0) {
            if (downX <= curX) {
                getParent().requestDisallowInterceptTouchEvent(false);
            } else {
                getParent().requestDisallowInterceptTouchEvent(true);
            }
        } else if (curIndex == getAdapter().getCount() - 1) {
            if (downX >= curX) {
                getParent().requestDisallowInterceptTouchEvent(false);
            } else {
                getParent().requestDisallowInterceptTouchEvent(true);
            }
        } else {
            getParent().requestDisallowInterceptTouchEvent(true);
        }

        return super.onTouchEvent(ev);
    }

    public void onSingleTouch() {
        if (onSingleTouchListener != null) {
            onSingleTouchListener.onSingleTouch();
        }
    }

    public interface OnSingleTouchListener {
        public void onSingleTouch();
    }

    public void setOnSingleTouchListner(
            OnSingleTouchListener onSingleTouchListener) {
        this.onSingleTouchListener = onSingleTouchListener;
    }

}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值