viewPager雙層嵌套的事件問題

問題描述:  ViewPager嵌套viewPager, 當childViewPager中加入了Onclick事件, 致使childViewpager的滑動消息被攔截掉。ide

 

很無奈。 this

解決方法: 重寫childviewPager, 攔截消息轉發.spa

public class ChildViewPager extends ViewPager {
    /** 觸摸時按下的點 **/
    PointF downP = new PointF();
    /** 觸摸時當前的點 **/
    PointF curP = new PointF();
    OnSingleTouchListener onSingleTouchListener;

    public ChildViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ChildViewPager(Context context) {
        super(context);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        // 當攔截觸摸事件到達此位置的時候,返回true,
        // 說明將onTouch攔截在此控件,進而執行此控件的onTouchEvent
        return true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent arg0) {
        // 每次進行onTouch事件都記錄當前的按下的座標
        curP.x = arg0.getX();
        curP.y = arg0.getY();

        if (arg0.getAction() == MotionEvent.ACTION_DOWN) {
            // 記錄按下時候的座標
            // 切記不可用 downP = curP ,這樣在改變curP的時候,downP也會改變
            downP.x = arg0.getX();
            downP.y = arg0.getY();
            // 此句代碼是爲了通知他的父ViewPager如今進行的是本控件的操做,不要對個人操做進行干擾
            getParent().requestDisallowInterceptTouchEvent(true);
        }

        if (arg0.getAction() == MotionEvent.ACTION_MOVE) {
            // 此句代碼是爲了通知他的父ViewPager如今進行的是本控件的操做,不要對個人操做進行干擾
            getParent().requestDisallowInterceptTouchEvent(true);
        }

        if (arg0.getAction() == MotionEvent.ACTION_UP) {
            // 在up時判斷是否按下和鬆手的座標爲一個點
            // 若是是一個點,將執行點擊事件,這是我本身寫的點擊事件,而不是onclick
            if (downP.x == curP.x && downP.y == curP.y) {
                onSingleTouch();
                return true;
            }
        }

        return super.onTouchEvent(arg0);
    }

    /**
     * 單擊
     */
    public void onSingleTouch() {
        if (onSingleTouchListener != null) {

            onSingleTouchListener.onSingleTouch();
        }
    }

    /**
     * 建立點擊事件接口
     */
    public interface OnSingleTouchListener {
        public void onSingleTouch();
    }

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

}
相關文章
相關標籤/搜索