android触摸事件分发与处理简述

android触摸事件分发与处理

android的分发机制:由父控件判断是否拦截,如果不拦截事件,则继续分发到子控件,然后一直分发下去。

处理:与分发相反,由子控件先处理事件,如果子控件不处理,则交给父控件处理,一直向上传递,直到那个控件处理了触摸事件

相关方法:

Boolean dispatchTouchEvent(MotionEvent ev)接收到触摸事件时,是否分发事件到下面的view,返回true分发触摸事件;不分发返回false,下面的view就拿不到事件

Boolean onInterceptTouchEvent(MotionEvent ev)接收到触摸事件时,是否拦截事件,返回true拦截,则调用onTouchEvent方法处理事件;返回false,继续向子控件传

Boolean onTouchEvent(View v,MotionEvent event)是否响应事件,返回true,响应;返回false不响应

这个方法是基于回调的

Boolean onTouch(View v,MotionEvent event)处理响应事件,当view调用了setOnTouchListener方法设置了触摸监听器,则事件响应的时候先调用onTouch方法
返回true,响应即事件被v消费onTouchEvent方法不执行;返回false时,不响应事件没有被消费而终止了,并调用onTouchEvent方法
这个方法是基于监听onTouchListener 的

void requestDisallowInterceptTouchEvent(Boolean disallowIntercept)请求父控件是否不拦截事件,返回true,不允许父控件的onInterceptTouchEvent调用;false 允许

事件是否被拦截,要看在当前父级阶段能否根据event事件找到消费此事件的控件,如果找到则返回true继续向下分发,否则处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android触摸事件分发是指在屏幕上发生触摸事件时,Android系统将该事件分发给适当的视图处理触摸事件分发的过程涉及多个层级,包括Activity、ViewGroup和View。 当用户触摸屏幕时,Android系统首先将触摸事件发送给当前活动的Window。然后,Window将事件传递给顶级ViewGroup(通常是根布局),该ViewGroup负责协调子视图的事件处理。 在ViewGroup中,触摸事件会按照一定的规则进行分发。常见的分发方式有以下几种: 1. 捕获阶段(Capture Phase):从根布局向下遍历,让父级ViewGroup有机会拦截事件。可以通过重写`onInterceptTouchEvent()`方法来实现事件的拦截。 2. 目标阶段(Target Phase):如果没有被拦截,触摸事件将传递给目标View,即最终接收事件的视图。目标View将调用`onTouchEvent()`方法处理事件。 3. 冒泡阶段(Bubble Phase):如果目标View没有消耗事件事件将向上传递给父级ViewGroup,直到根布局。在这个阶段,可以通过返回值来控制是否继续向上传递。 除了上述的默认分发方式外,还可以通过重写`dispatchTouchEvent()`方法来自定义事件分发逻辑。通过调用`super.dispatchTouchEvent()`来保持默认行为,或者根据需求进行处理。 总结来说,Android触摸事件分发涉及捕获阶段、目标阶段和冒泡阶段,通过重写相关方法或自定义分发逻辑,可以实现对触摸事件处理和控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值