为什么属性动画移动一个控件后,目标位置仍然能响应用户事件?
原始网页直通车
这个问题,换句话描述就是:一个 view
在应用了属性动画后,该 view
在新的位置仍然能正确的收到分派的事件。
我们知道, view
调用 translationXX
方法后,虽然它在屏幕上显示的位置变了,但它的 [left, top, right, bottom]
是不变的,那 ViewGroup
是如何找到这个“偷跑” view
并正确分派事件的呢?
正常情况下,当手指按下时,触摸事件会经过 ViewGroup
中的 dispatchTouchEvent
方法筛选符合条件(手指在边界范围内)的 子view
进行事件分派。这样的话,如果一个 子view
刚好应用了 translation
属性动画,那在 ViewGroup
筛选 子View
时,直接判断触摸点是否在 [left, top, right, bottom]
范围内,就会出现问题。
那它是怎么判断的呢?
- 它会先调用
子view
的hasIdentityMatrix
方法来判断这个view
是否应用过位移、缩放、旋转之类的属性动画; - 如果应用过的话,还会调用
子view
的getInverseMatrix()
做“反平移”操作,把触摸点映射到子view
的逆矩阵上; - 判断处理后的触摸点,是否在该
子view
的边界范围内。
一个栗子:
如果一个 view
原本的中心点是 [100, 100]
,向右向下各平移 100 个单位,即 x + 100
, y + 100
后,中心点坐标就变成了 [200, 200]
,这时候我们点击 [200, 200]
这个点后,经过“反平移”,即 x - 100
, y - 100
后,变成了 [100, 100]
,这个点正是 view
做动画前的中心点,在该 view
的边界范围内。
那为什么属性动画可以这样,补间动画就不行呢?
view
在 draw
的时候,会检测是否设置了 Animation(补间动画)
,如果有的话,会获取这个动画当前的值(旋转或位移或缩放,透明度等),应用到 canvas
上,然后把内容 draw
出来。它的作用只会在 draw
的时候有效。
为什么属性动画移动一个控件后,目标位置仍然能响应用户事件?相关推荐
- android 一分钟倒计时动画,Android利用属性动画自定义倒计时控件
本文介绍一下利用属性动画(未使用Timer,通过动画执行次数控制倒计时)自定义一个圆形倒计时控件,比较简陋,仅做示例使用,如有需要,您可自行修改以满足您的需求.控件中所使用的素材及配色均是笔者随意选择 ...
- RelativeLayout里各个控件的相对位置
RelativeLayout相对布局 RelativeLayout是一种相对布局,控件的位置是按照相对位置来计算的,后一个控件在什么位置依赖于前一个控件的基本位置,是布局最常用,也是最灵活的一种布局. ...
- WPF中一个控件绑定另一个控件的属性
原文:WPF中一个控件绑定另一个控件的属性 如同一个Grid中的一个按钮根据另一个按钮的显示与否作出不同的响应: 绑定的时候通过ElementName来指定控件 <Grid Margin=&qu ...
- 刷新后控制TAB键到下一个控件
页面上的控件能一直TAB下去,这是系统的一个很基本的要求.在网上没有搜索到相关的方法.我觉得一般做法都是使页面无刷新,但是如果遇到页面不得不刷新的情况,如何去控制呢? 思路是很简单的,首先是获取 ...
- 怎么把一个控件放到tab页面上去?_C/C++应用无障碍化如何支持Tab键浏览
一.前言 我们知道,正常人操作电脑,只需一眼便能得知屏幕上的内容,要想激活某个控件,例如按钮等,只需将鼠标拖动过去点击即可. 但这对于盲人而言,却十分繁琐. 盲人使用屏幕阅读器来操作电脑,在使用某个软 ...
- android 水滴动画效果图,Android控件实现水滴效果
看到ios版上QQ刷新效果像水滴,然后自己也想着去实现这样的效果,这篇文章暂时没有介绍下拉刷新的效果,只是单独用一个控件来实现这样的水滴效果. 效果图如下: 一.总体思路 1.画两个圆形,其中一个就是 ...
- android 取消控件焦点,C# 给一个控件去掉焦点
给一个控件去掉焦点(如选中控件按钮button时,按钮出现方框显示): 例如给form这个窗体中的button按钮去焦点 1.首先在form这个窗体中拖一个label按钮,去文字,设置背景为透明: 2 ...
- android让一个控件跟上面控件对其,学个明白--Android控件架构
Android控件架构 1.什么是View? View是Android中所有控件的基类.View是界面层的控件的一种抽象,它代表了一个控件.在Android中每个控件都会在界面中占得一块矩形的区域.在 ...
- Silverlight带关闭动画的内容控件,可移动的内容控件(一)
本例给大家介绍两个自定义控件,一个有显示和关闭两种状态,在状态切换时有动画效果.另外一个是可以拖动的内容控件,可以制作能拖动的面板. A.带关闭动画的内容控件. .xaml View Code < ...
最新文章
- 17秋 软件工程 第六次作业 Beta冲刺 总结博客
- [C/C++标准库]_[初级]_[优先队列priority_queue的使用]
- python绘制动态模拟图-Python 模拟生成动态产生验证码图片的方法
- nginx + uwsgi + Django 应用部署
- Struts2第十一篇【简单UI标签、数据回显】
- 大商超的2020:转型、收紧、试新
- SpringBoot响应Json数据乱码通过配置解决
- 风变python基础语法第11关_Python基础语法学习笔记之风变第十四关项目实操
- 牛客网编程练习之编程马拉松:解读密码
- 选择座位html,影厅座位预览效果(css3)_html/css_WEB-ITnose
- 1.1为什么选择序列模型
- 白帽子讲Web安全(第 10 章 访问控制)
- 百数巡检领域系统能力展示
- 网站一直被大流量DDOS攻击,服务器被打死了怎么办?
- 2022年上半年网络工程师上午真题及答案
- 爬虫抓包问题全面分析
- 还在找各种便签软件?Windows10自带的便签足矣
- 前端性能优化:1.什么是前端性能优化
- 使用vue-cli脚手架工具创建vue项目
- python调用百度接口实现ocr识别_Python 3调用百度OCR API实现剪贴板文字识别