viewPager雙層嵌套的事件問題


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

 

很無奈。 

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

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;
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM