Android ViewPager与子控件点击事件冲突的解决方案
2015-09-16 17:59
597 查看
ViewPager里面经常会放置很多东西,本文提供一个解决思路。
子空间不使用OnClickListener,而使用OnTouchListener:
然后在ViewPager的Touch事件中进行处理。
这样就解决了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与子控件的点击事件冲突。
我最开始遇到这个问题的时候是想如何解决冲突,可是最后都有这样那样的问题。后来我换了个思路,与其解决两个事件的冲突,那么不如将两个事件变成一个事件,这样不久没有冲突了么,然后配一些参数不久得了。就是上面的代码啦~
相关文章推荐
- CSDN的CODE平台使用
- Spring 上传文件 android 端代码
- Android 自定义控件之inflate()
- Android Studio导入第三方类库的方法
- Android内部存储--InternalStorage
- android运行activity时报 Unfortunately,TestLayout has stopped 问题
- Android Studio用过的快捷键
- android
- Android 动画显示文字与bitmap的BadgeView
- Android内存管理之道
- android sdk里的那些东西都是用来干嘛的?
- Android 利用Gson生成Json字符串
- android 百度地图 通过剪裁图片添加 Marker
- Android中Display及DisplayMetrics理解
- Android 给AChartEngine绘制的曲线图加渐变色(修改AChartEngine源码)
- Android数据存储--SharedPreferences--共享数据存储
- android中数据存储方式总结
- android 新手到初级的编码历程
- Android NDK开发之JNI基础知识
- android 动态库死机调试方法