Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> andorid自定義ViewPager之——子ViewPager滑到邊緣後直接滑動父ViewPager

andorid自定義ViewPager之——子ViewPager滑到邊緣後直接滑動父ViewPager

編輯:關於Android編程

  最近的項目中,有一個需求要用ViewPager中嵌套ViewPager去實現整個效果,沒做任何處理做出來後,只能不停的滑動子ViewPager,父ViewPager就無法滑動了,這樣肯定是不滿足的,分析了一下原因,很顯示是整個滑動事件都被子ViewPager消耗掉了,所以只能對ViewPager做一下自定義處理,才可以實現。以下是這個需求實現後的效果圖:

  \\\

  從圖上就可以看出:我們用ViewPager中嵌套了ViewPager,而且要實現的是子ViewPager滑動到最後一頁時,再滑就是滑動父ViewPager.下面將自定義的ViewPager代碼貼出來,大家可以參考下。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+oaGhoTwvcD4KPHByZSBjbGFzcz0="brush:java;">/********************************************************** * @文件名稱:MyViewPager.java * @創建時間:2014年11月18日 下午4:24:25 * @修改歷史:2014年11月18日創建初始版本 **********************************************************/ public class MyViewPager extends ViewPager { //父ViewPager的引用  private ViewPager viewPager; private boolean flag = true; private float mLastMotionX; public BookstoreViewPager(Context context) { super(context); } public BookstoreViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public ViewPager getViewPager() { return viewPager; }     //處理前必須調用此方法初始化沖突ViewPager public void setViewPager(ViewPager viewPager) { this.viewPager = viewPager; } @Override public boolean dispatchTouchEvent(MotionEvent ev) { final float x = ev.getX(); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // 使父控件不處理任何觸摸事件 viewPager.requestDisallowInterceptTouchEvent(true); flag = true; mLastMotionX = x; break; case MotionEvent.ACTION_MOVE: if (flag) { if (x - mLastMotionX > 5 && getCurrentItem() == 0) { flag = false;  viewPager.requestDisallowInterceptTouchEvent(false); //將事件交由父控件處理 } if (x - mLastMotionX < -5 && getCurrentItem() == getAdapter().getCount() - 1) { flag = false; viewPager.requestDisallowInterceptTouchEvent(false); } } break; case MotionEvent.ACTION_UP: viewPager.requestDisallowInterceptTouchEvent(false); break; case MotionEvent.ACTION_CANCEL: viewPager.requestDisallowInterceptTouchEvent(false); break; } return super.dispatchTouchEvent(ev); } }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved