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

    xiaoxiao2021-03-25  115

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

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

    [java]  view plain  copy   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) < (float5.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)。
    转载请注明原文地址: https://ju.6miu.com/read-3857.html

    最新回复(0)