天天看點

解決viewpager嵌套滑動沖突,并保留側滑菜單功能

重寫子pagerview的dispatchTouchEvent方法,在傳回前添加一句getParent().requestDisallowInterceptTouchEvent(true)中斷掉事件的傳遞,類如下

public class SupperViewPager extends ViewPager {
    private int screenWidth;//螢幕寬度

    public SupperViewPager(Context context) {
        super(context);


    }

    public SupperViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO 自動生成的構造函數存根
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        screenWidth = MeasureSpec.getSize(widthMeasureSpec);//view測量時擷取螢幕寬度
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        // screenWidth = getResources().getDisplayMetrics().widthPixels;
        System.out.println("螢幕寬度" + screenWidth);
        /*判斷螢幕是否滿足一定條件,滿足則中斷時間
        即,兩邊各留出一定寬度使靠邊滑動時可以相應父pagerview   的事件,例如左邊有側滑菜單,右邊靠邊可以滑到另一個父viewpager的下一個*/
        if (ev.getRawX() > screenWidth /  && ev.getRawX() < screenWidth *  / ) {
            getParent().requestDisallowInterceptTouchEvent(true);
        }
        return super.dispatchTouchEvent(ev);
    }

}