事件分发

1、遵循 Activity => ViewGroup => View 的传递顺序(由上级往下级传,下级能处理就处理,处理不了就、往上传)

     如果view没有处理事件,则反向传递,如果都没有消费,最终由Activity的onTouchEvent方法来处理

2、dispatchTouchEvent:用来事件分发,当事件传递给view时就会被调用

     onInterceptTouchEvent:用于拦截事件,在dispatchTouchEvent内被调用(只有VewGroup中有)

     onTouchEvent:在dispatchTouchEvent中调用,用来处理事件

3、当事件传递给ViewGroup时,dispatchTouchEvent会被调用,

     如果onInterceptTouchEvent返回true,表示拦截,事件由 viewGroup的onTouchEvent 方法处理。

     如果返回false,则不拦截,将事件传递给子View。

     View拿到事件后调用自己的dispatchTouchEvent方法,然后调用onTouchEvent方法,

     通过 onTouchEvent的返回值来决定是否消费事件,

     如果返回true,自己处理

     如果返回fals,则向上传递父级的onTouchEvent处理
 

4、滑动冲突

    ScrollView嵌套ViewPager

1、外部拦截 

重写父View(外层)的onInterceptTouchEvent方法,判断左右滑动和上下滑动的距离,由此决定是否消费事件(return true)

2、内部拦截

先在Action_down 请求父View不拦截requestDisallowInterceptTouchEvent(true),

再在Action_move中根据条件判断父View是否拦截

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值