ScrollViewViewPager嵌套導致滑動衝突解決方案

解決方案1:

自定義Viewpager做爲子控件

    public class ChildViewPager extends ViewPager{ 
        /** 觸摸時按下的點 **/ 
        PointF downP = new PointF(); 
        /** 觸摸時當前的點 **/ 
        PointF curP = new PointF();  
        OnSingleTouchListener onSingleTouchListener; 
     
        public ChildViewPager(Context context, AttributeSet attrs) { 
            super(context, attrs); 
            // TODO Auto-generated constructor stub 
        } 
     
        public ChildViewPager(Context context) { 
            super(context); 
            // TODO Auto-generated constructor stub 
        } 
     
        @Override 
        public boolean onInterceptTouchEvent(MotionEvent arg0) { 
            // TODO Auto-generated method stub 
            //當攔截觸摸事件到達此位置的時候,返回true, 
            //說明將onTouch攔截在此控件,進而執行此控件的onTouchEvent 
            return true; 
        } 
     
        @Override 
        public boolean onTouchEvent(MotionEvent arg0) { 
            // TODO Auto-generated method stub 
            //每次進行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(); 
            } 
        } 
     
        /**
         * 創建點擊事件接口
         * @author wanpg
         *
         */ 
        public interface OnSingleTouchListener { 
            public void onSingleTouch(); 
        } 
     
        public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) { 
            this.onSingleTouchListener = onSingleTouchListener; 
        } 
     
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章