ViewPager里面经常会放置很多东西,本文提供一个解决思路。

子空间不使用OnClickListener,而使用OnTouchListener:

class OnClick implements View.OnTouchListener {        private String title;              public ZhiDeSouOnClick(String title) {            this.title = title;               }        @Override        public boolean onTouch(View v, MotionEvent event) {            int action = event.getAction();            switch (action) {                case MotionEvent.ACTION_DOWN:                      title_all = title;                    break;            }            return false;        }    }
例如上面,这是子控件的TouchListener事件,我要传递一个“title”参数,我定义一个全局的“title_all”参数,在Touch事件中将title传出去。这里面TouchListener的返回值一定要是false,因为返回false的话,我们手指触摸到屏幕的事件就不会被ViewPager里的子控件拦截,而是会继续向下传递。但是,一旦返回了false,那么子控件就只有:
MotionEvent.ACTION_DOWN
这个响应事件,其他的响应事件捕捉不到,这也是正常的。

然后在ViewPager的Touch事件中进行处理。

viewPager.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                int action = event.getAction();                switch (action) {                    case MotionEvent.ACTION_DOWN:                        startX = (int) event.getX();                        startY = (int) event.getY();                        break;                    case MotionEvent.ACTION_MOVE:                        break;                    case MotionEvent.ACTION_UP:                        endX = (int) event.getX();                        endY = (int) event.getY();                        if (Math.abs(endX - startX) < 50 && Math.abs(endY - startY) < 50) {                            try {                                Toast.makeText(getApplicationContext(), "这是从子控件传来的参数,在ViewPager中响应的事件"+title_all, Toast.LENGTH_SHORT).show();                            } catch (Exception e) {                            }                        }                        break;                }                return false;            }        });
这样处理了之后子空间就不会拦截ViewPager的滑动了,因为我们在子空间的Touch事件中返回了false。这里子空间一定要用Touch,如果用Click事件的话,就会拦截,导致ViewPager无法滑动。子控件将想要实现的方法的参数传出去(由此来判断是ViewPager中的哪个子控件),然后在ViewPager的Touch事件中进行处理。在ACTION_UP中进行计算,当用户的手指移动小于50的时候就触发方法。

这样就解决了ViewPager与子控件的点击事件冲突。

我最开始遇到这个问题的时候是想如何解决冲突,可是最后都有这样那样的问题。后来我换了个思路,与其解决两个事件的冲突,那么不如将两个事件变成一个事件,这样不久没有冲突了么,然后配一些参数不久得了。就是上面的代码啦~

更多相关文章

  1. Android(安卓)获取验证码倒计时实现
  2. Android(安卓)Material design设计风格
  3. Android用户界面
  4. Android(安卓)Editable
  5. RxJava2+retrofit简单使用,基于POST请求封装工具类
  6. webview
  7. Android(安卓)自定义控件在Android(安卓)Studio中xmlns不识别
  8. android send key event
  9. Android(安卓)自定义控件属性

随机推荐

  1. Android线程池的使用
  2. MTK Android(安卓)编译环境搭建总结
  3. 从Android模拟器sdcard中导出文件
  4. 关于 Android(安卓)opencv 屏幕方向的bug
  5. Android(安卓)ExpandableGridView的实现
  6. viewpage setOnPageChangeListener 监听
  7. Android组件详解—TextView
  8. Android控制双击返回按钮退出程序的代码
  9. Android的开发环境搭建及新建工程
  10. Android(安卓)使用 Batterystats 和 Batt