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;
        }
    
    }
  • 相关阅读:
    17、springcloud整合lettuce使用redis
    16、springcloud整合Swagger2构建Restful服务的APIs
    15、Feign整合断路器监控Hystrix Dashboard
    14、Ribbon整合断路器监控Hystrix Dashboard
    13、如何使用断路器监控Hystrix Dashboard
    12、Feign整合断路器Hystrix
    wince中对ini文件的操作
    winform应用程序更新 带进度条
    wince隐藏任务栏
    一文学会JVM性能优化
  • 原文地址:https://www.cnblogs.com/xitang/p/3179649.html
Copyright © 2011-2022 走看看