標籤:viewpager 嵌套 不能滑動
現在最頭疼的事就是需求不明確,這不,有遇到你個奇葩需求,父viewPager總共有三個選項卡,第一個選項卡裡嵌入一個子viewPager,這時候問題就來了,子viewPager無法滑動,我猜的事父viewPager把子viewPager攔截了,於是嘗試了下面的第一種方法
1.重寫父viewPager的onInterceptTouchEvent方法
/** * @author 子墨 * * 2015-2-26上午8:59:50 */public class MyViewPager extends ViewPager {public MyViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent arg0) {return false;}}
當然方法很多,也可以嘗試重寫子viewPager
2.重寫子viewPager,通過getParent().requestDisallowInterceptTouchEvent(true)方法 通知父控制項不攔截
public class MyViewPager extends ViewPager { public MyViewPager(Context context) { super(context); } public MyViewPager(Context context, AttributeSet attrs) { super(context, attrs); } PointF downPoint = new PointF(); OnSingleTouchListener onSingleTouchListener; @Override public boolean onTouchEvent(MotionEvent evt) { switch (evt.getAction()) { case MotionEvent.ACTION_DOWN: // 記錄按下時候的座標 downPoint.x = evt.getX(); downPoint.y = evt.getY(); if (this.getChildCount() > 1) { //有內容,多於1個時 // 通知其父控制項,現在進行的是本控制項的操作,不允許攔截 getParent().requestDisallowInterceptTouchEvent(true); } break; case MotionEvent.ACTION_MOVE: if (this.getChildCount() > 1) { //有內容,多於1個時 // 通知其父控制項,現在進行的是本控制項的操作,不允許攔截 getParent().requestDisallowInterceptTouchEvent(true); } break; case MotionEvent.ACTION_UP: // 在up時判斷是否按下和鬆手的座標為一個點 if (PointF.length(evt.getX() - downPoint.x, evt.getY() - downPoint.y) < (float) 5.0) { onSingleTouch(this); return true; } break; } return super.onTouchEvent(evt); } public void onSingleTouch(View v) { if (onSingleTouchListener != null) { onSingleTouchListener.onSingleTouch(v); } } public interface OnSingleTouchListener { public void onSingleTouch(View v); } public void setOnSingleTouchListener( OnSingleTouchListener onSingleTouchListener) { this.onSingleTouchListener = onSingleTouchListener; } } 重寫子viewpager代碼摘自杭州山不高
其實上面的兩種方法更傾向於第一種,當然第二種也能解決問題,但是第二種會破壞事件分發的流程,直接告訴父控制項不要攔截,我自己的是自己處理,總歸有些霸道,哈哈,不符合中庸之道
這樣寫能解決問題,但是體驗不好,最後還是放棄了,我只是分享我遇到的問題和解決方案,如果你有更好的方法,互相交流。
Android之viewPager嵌套viewPager無法滑動子viewPager