Android点击事件分发/拦截学习心得

本文探讨了Android点击事件的流向,详细解析了View的dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent方法在事件分发和拦截中的角色。通过对事件传输相关结论的分析,阐述了解决滑动冲突的策略,并提供了伪代码示例。
摘要由CSDN通过智能技术生成

这篇博文是在阅读了《Android开发艺术探索》(任玉刚),并在自己写了一个相关控件后进行总结的目的的博文,本文主要介绍自己从书中学到的Android点击事件的分发拦截相关知识点以作记录。

一、点击事件的流向

点击事件在Android系统中具体表示为MotionEvent,可以在可以通过其getAction() 方法获得点击事件的类型包括ACTION_DOWM(按下)、ACTION_MOVE(滑动)、ACTION_UP(抬起)。同时也可以获得点击事件的位置 ,getX()/getY() 获得是相对于当前view左上角的位置 ,getRawX()/getRawY() 获得的是相对手机屏幕左上角的位置。

点击事件先由Activity获得,并通过其Window传送给最外层的ViewGroup,之后点击事件就在这个ViewGroup中由外至内的传播,如果没有被拦截的话再由内至外的返回。

二、View点击事件分发机制

2.1 简介

点击事件主要由三个方法来完成:dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent,三个方法的参数都只有MotionEvent一个。
在事件能够传递到当前View的情况下,三个方法的相关情况:
dispatchTouchEvent 一定会被调用,用来进行点击事件的分发
onInterceptTouchEvent 表示是否拦截某个事件,不一定会被调用,如果当前View拦截了某个事件,那么在同一事件序列中此方法不会被再次调用
onTouchEvent 表示是否消耗当前事件,如果不消耗当前事件的话,则同一事件序列中当前View无法再次接收到事件

引用书中的伪代码来勉强表示这三个方法的关系:

public boolean dispatchTouchEvent (MotionEvent ev){
   
	boolean consume=false;
	if(onInterceptTouchEvent (ev
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值