zoukankan      html  css  js  c++  java
  • viewPager双层嵌套的事件问题

    问题描述:  ViewPager嵌套viewPager, 当childViewPager中加入了Onclick事件, 导致childViewpager的滑动消息被拦截掉。

    很无奈。 

    解决方法: 重写childviewPager, 拦截消息转发.

    public class ChildViewPager extends ViewPager {
        /** 触摸时按下的点 **/
        PointF downP = new PointF();
        /** 触摸时当前的点 **/
        PointF curP = new PointF();
        OnSingleTouchListener onSingleTouchListener;
    
        public ChildViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public ChildViewPager(Context context) {
            super(context);
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent arg0) {
            // 当拦截触摸事件到达此位置的时候,返回true,
            // 说明将onTouch拦截在此控件,进而执行此控件的onTouchEvent
            return true;
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent arg0) {
            // 每次进行onTouch事件都记录当前的按下的坐标
            curP.x = arg0.getX();
            curP.y = arg0.getY();
    
            if (arg0.getAction() == MotionEvent.ACTION_DOWN) {
                // 记录按下时候的坐标
                // 切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变
                downP.x = arg0.getX();
                downP.y = arg0.getY();
                // 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰
                getParent().requestDisallowInterceptTouchEvent(true);
            }
    
            if (arg0.getAction() == MotionEvent.ACTION_MOVE) {
                // 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰
                getParent().requestDisallowInterceptTouchEvent(true);
            }
    
            if (arg0.getAction() == MotionEvent.ACTION_UP) {
                // 在up时判断是否按下和松手的坐标为一个点
                // 如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick
                if (downP.x == curP.x && downP.y == curP.y) {
                    onSingleTouch();
                    return true;
                }
            }
    
            return super.onTouchEvent(arg0);
        }
    
        /**
         * 单击
         */
        public void onSingleTouch() {
            if (onSingleTouchListener != null) {
    
                onSingleTouchListener.onSingleTouch();
            }
        }
    
        /**
         * 创建点击事件接口
         */
        public interface OnSingleTouchListener {
            public void onSingleTouch();
        }
    
        public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) {
            this.onSingleTouchListener = onSingleTouchListener;
        }
    
    }
  • 相关阅读:
    cf C. Vasya and Robot
    zoj 3805 Machine
    cf B. Vasya and Public Transport
    cf D. Queue
    cf C. Find Maximum
    cf B. Two Heaps
    cf C. Jeff and Rounding
    cf B. Jeff and Periods
    cf A. Jeff and Digits
    I Think I Need a Houseboat
  • 原文地址:https://www.cnblogs.com/xitang/p/3179649.html
Copyright © 2011-2022 走看看