android View事件分发和事件拦截,35岁以上程序员求职没市场

Top = getTop();

Bottom = getBottom();

(3)随着版本的迭代,后来增加了几个参数:x、y、translationX和translationY四个参数:

x、y是View的左上角的坐标,而translationX和translationY是View左上角相对父容器的偏移量。

x = left + translationX;

y = top + translationY;

2.MotionEvent和TouchSlop

(1)MotionEvent有如下几种类型的事件:

- ACTION_DOWN:手指刚接触屏幕

- ACTION_MOVE:手指在屏幕上滑动

- ACTION_UP:手指在屏幕上松开的瞬间

(2)TouchSlop

是一个常量,当滑动的值小于这个常量的时候,是不认为在滑动获取的方法是:ViewConfiguration.get(getContext()).getScaledTouchSlop();

3.VelocotyTracker、GestureDetector

(1)VelocotyTracker作用是追踪手指的滑动速度,在获取速度之前要调用一个方法,computeCurrentVelocity();然后再调用getXVelocity()和getYVelocity()这两个方法获取速度。

(2)GestureDetector用于辅助检测用户的单击、滑动、长按、双击等行为,创建GestureDetector对象,实现OnGestureListener接口监听双击行为使用。

二.View的事件分发机制

1.点击事件的传递规则

主要有三个方法:

(1)public boolean dispatchTouchEvent(MotionEvent ev)

用来事件的分发,如果事件能够传递给当前的View,那么此方法一定会被调用,返回的结果受到当前View的onTouchEvent和下级的dispatchTouchEvent方法的影响。

(2)public boolean onInterceptTouchEvent(MotionEvent ev)

是在上述方法的内部调用,用来判断是否拦截某个事件,如果View拦截了某个事件,那么在同一个事件的序列当中,此方法不会再被调用,返回结果表示是否拦截当前事件。

(3)public boolean onTouchEvent(MotionEvent event)

在dispatchTouchEvent方法中调用,用来处理点击的事件,返回结果是否消耗当前事件,如果不消耗,如果不消耗,则在同一个事件的序列中,当前View无法再次接收到事件。

(上述三个方法的关系,可以使用一段伪代码很好的诠释三个方法的关系)

/**

  • 点击事件产生后,首先传递给本View的dispatchTouchEvent方法被调用,

  • @param ev

  • @return

*/

@Override

最后

最后这里放上我这段时间复习的资料,这个资料也是偶然一位朋友分享给我的,里面包含了腾讯、字节跳动、阿里、百度2020-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。

还有 高级架构技术进阶脑图、高级进阶架构资料 帮助大家学习提升进阶,这里我也免费分享给大家也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

有需要的朋友可以点击:**Android面试资料**免费领取~

一起互勉~

mg-QATH4A1W-1644903691530)]

[外链图片转存中…(img-X83Aeblh-1644903691531)]

一起互勉~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值