ViewPager相互嵌套,里层ViewPager无法滑动

来源:互联网 发布:hptv手机电视软件 编辑:程序博客网 时间:2024/05/18 01:29

ViewPager嵌套ViewPager,默认情况下,里层的ViewPager,是无法滑动的!
默认情况下,外层的ViewPager,会拦截触屏事件(TouchEvent)。

通过重写里层控件的onTouchEvent方法,调用其父控件的requestDisallowInterceptTouchEvent()方法;
使其父控件,不拦截触屏事件(TouchEvent),以此,便能达到里层的ViewPager,也能滑动的效果了。

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的单击事件的监听函数(OnSingleTouchListener)。

0 0