Android之viewPager嵌套viewPager無法滑動子viewPager

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.