摘要
父控件拦截子控件的触摸事件解决办法,重写子控件中的onInterceptTouchEvent(boolean)方法,然后设置父控件在执行该方法时返回true,即父控件不拦截子控件的触摸事件。经常遇到的一个触摸冲突的一个控件ViewPager,ViewPager可以左右滑动,每个Fragment展示新闻列表,使用PullToRefreshListView控件,在设置的适配器中第一栏添加头条滚动效果,需要给头条添加左右滑动的事件,这个时候与ViewPager的左右滑动冲突。重写子控件是第一种解决办法,第二种解决办法是重写父控件,其原理就是设置父控件的onInterceptTouchEvent()返回值为true,以后再遇到事件冲突的问题都可以这样子解决。
第一种解决办法:重写子控件
- private ViewGroup parent;
- public void setDisallowInterceptParentTouchEvent(ViewGroup parent) {
- this.parent = parent;
- }
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- if (parent != null) {
- parent.requestDisallowInterceptTouchEvent(true);
- }
- return super.dispatchTouchEvent(ev);
- }
- @Override
- public boolean onInterceptTouchEvent(MotionEvent arg0) {
- if (parent != null) {
- parent.requestDisallowInterceptTouchEvent(true);
- }
- return super.onInterceptTouchEvent(arg0);
- }
- @Override
- public boolean onTouchEvent(MotionEvent arg0) {
- if (parent != null) {
- parent.requestDisallowInterceptTouchEvent(true);
- }
- return super.onTouchEvent(arg0);
- }
第二种解决办法:重写父控件
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- requestDisallowInterceptTouchEvent(true);
- return super.dispatchTouchEvent(ev);
- }
- @Override
- public boolean onInterceptTouchEvent(MotionEvent arg0) {
- requestDisallowInterceptTouchEvent(true);
- return super.onInterceptTouchEvent(arg0);
- }
- @Override
- public boolean onTouchEvent(MotionEvent arg0) {
- requestDisallowInterceptTouchEvent(true);
- return super.onTouchEvent(arg0);
- }
解决的原理:设置父控件的onInterceptTouchEvent()返回值为true,请求不拦截触摸事件
你可能感兴趣的文章
来源:TeachCourse,
每周一次,深入学习Android教程,关注(QQ158#9359$239或公众号TeachCourse)
转载请注明出处: https://www.teachcourse.cn/1795.html ,谢谢支持!
转载请注明出处: https://www.teachcourse.cn/1795.html ,谢谢支持!