关闭

ViewPager子View滑动事件冲突解决

322人阅读 评论(0) 收藏 举报

事件分发:public boolean dispatchTouchEvent(MotionEvent ev)

Android事件以隧道方式逐层向下传递。事件首先由dispatchTouchEvent方法分发,分发逻辑如下:

    return true;由该dispatchTouchEvent方法消费并且停止分发。

    return false;返回给父view的onTouch方法处理

    return super.dispatchTouchEvent(ev);有当前view的onInterceptTouchEvent()拦截处理。

 事件拦截:public boolean onInterceptTouchEvent(MotionEvent ev)

当前view拦截到事件后,处理流程如下:

    return false;表示放行由当前view的子view的dispatchTouchEvent分发处理。

    return true或return super.onInterceptTouchEvent()表示拦截该事件,由该View的Ontouch方法处理。

事件响应:public boolean onTouchEvent(MotionEvent ev)

    return true表示消费。

    return false或return super.onTouch()则此事件传递给上层View的onTouch方法处理。

此上是笔者关于Android事件分发的一些小总结。

回到上面的问题,ViewPager中子View的滑动冲突问题,笔者这里遇到的问题是ViewPager的View中嵌套一个广告条,广告条是需要左右滑动的,这样广告条的滑动事件和ViewPager很明显会缠上冲突。笔者这里用到的方法是,在广告条组件中添加此方法。

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        getParent().requestDisallowInterceptTouchEvent(true);
        return super.dispatchTouchEvent(ev);
    }


这里dispatchTouchEvent方法对事件进行分发,根据上面的总结很明显是分发当前的onInterceptTouchEvent(),然后分发给当前view的onTouchEvent由此处理滑动事件。同时

getParent().requestDisallowInterceptTouchEvent(true);


这句话告诉父控件此事件你就不要拦截了,由我子view自己进行处理即可。这样即可解决此冲突问题。

0
0
查看评论

ViewPager子View滑动事件冲突解决

事件分发:public boolean dispatchTouchEvent(MotionEvent ev)Android事件以隧道方式逐层向下传递。事件首先由dispatchTouchEvent方法分发,分发逻辑如下:return true;由该dispatchTouchEvent方法消费并且停止...
  • u012948731
  • u012948731
  • 2016-01-22 10:53
  • 314

用requestDisallowInterceptTouchEvent()方法防止viewpager和子view滑动事件冲突

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0803/1500.html 摘要 ViewPager来实现左右滑动切换tab,如果tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比如想滑动tab项中的...
  • qq_25815655
  • qq_25815655
  • 2016-03-12 16:59
  • 605

Android 笔记 ViewPager的滑动与子view内部滑动事件的冲突问题

ViewPager 与子view的滑动冲突在上一次笔记中建设了一个可以滑动的photoView,显示图片,可以放大,滑动大部分时候这个自定义View会和ViewPager一起使用。也就是我们通常看到的相册里面的效果,滑动可以显示不同的图片。而在单页中,很多时候也需要滑动。这时候会和ViewPage...
  • super_zq
  • super_zq
  • 2016-10-13 14:14
  • 1492

自定义viewpager,禁止父view拦截touch事件

package com.utoow.konka.view; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import a...
  • u013895206
  • u013895206
  • 2014-09-13 11:18
  • 1611

ViewPager的使用及获取子view控件的操作(inflate)

Step 1: 布局文件中添加viewpager和切换页面button <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http...
  • phenixyf
  • phenixyf
  • 2016-05-16 18:51
  • 5003

view嵌套处理滑动,子view传递滑动事件给父view,父view传递滑动事件给子view

http://www.jianshu.com/p/87a41b8c0dd0 在两个滑动的view嵌套的时候,如果这两个view的滑动方向一致,则可能会出现滑动事件的冲突。 1、在处理滑动事件的响应问题时,子view需要处理滑动事件的时候,可以让父view不处理滑动事件 // 不允许parent...
  • a465456465
  • a465456465
  • 2016-11-03 08:55
  • 1179

ViewPager滑动事件总结

ViewPager的滑动事件的处理需要用到OnPageChangeListener 在
  • hym2111
  • hym2111
  • 2014-08-04 17:28
  • 6072

用requestDisallowInterceptTouchEvent()方法防止viewpager和子view冲突

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0803/1500.html 摘要 ViewPager来实现左右滑动切换tab,如果tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比如想滑动tab项...
  • fancylovejava
  • fancylovejava
  • 2013-10-23 17:08
  • 10643

SwipeRefreshLayout与ViewPager滑动事件冲突解决

问题描述:开发中发现,SwipeRefreshLayout的下拉刷新,与ViewPager开发的banner的左右滑动事件有一点冲突,导致banner的左右滑动不够顺畅。很容易在banner的左右滑动的过程中,触发SwipeRefreshLayout的下拉刷新,从而导致banner左右滑动的体验很差...
  • arui319
  • arui319
  • 2016-01-13 11:42
  • 5217

解决android子控件与父控件滑动冲突的问题

解决android子控件与父控件滑动冲突的问题开发过程中会遇到可滑动控件互相嵌套导致滑动冲突的问题考虑到滑动冲突是由于父view的onInterceptTouchEvent(MotionEvent ev)函数调用导致的,可以通过调用父view的requestDisallowInterceptTouc...
  • zmscs
  • zmscs
  • 2016-04-07 22:25
  • 3300
    个人资料
    • 访问:11322次
    • 积分:324
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:6篇
    • 译文:0篇
    • 评论:5条
    最新评论