原始网页直通车

这个问题,换句话描述就是:一个 view 在应用了属性动画后,该 view 在新的位置仍然能正确的收到分派的事件。

我们知道, view 调用 translationXX 方法后,虽然它在屏幕上显示的位置变了,但它的 [left, top, right, bottom] 是不变的,那 ViewGroup 是如何找到这个“偷跑” view 并正确分派事件的呢?

正常情况下,当手指按下时,触摸事件会经过 ViewGroup 中的 dispatchTouchEvent 方法筛选符合条件(手指在边界范围内)的 子view 进行事件分派。这样的话,如果一个 子view 刚好应用了 translation 属性动画,那在 ViewGroup 筛选 子View 时,直接判断触摸点是否在 [left, top, right, bottom] 范围内,就会出现问题。

那它是怎么判断的呢?

  1. 它会先调用 子viewhasIdentityMatrix 方法来判断这个 view 是否应用过位移、缩放、旋转之类的属性动画;
  2. 如果应用过的话,还会调用 子viewgetInverseMatrix() 做“反平移”操作,把触摸点映射到 子view 的逆矩阵上;
  3. 判断处理后的触摸点,是否在该 子view 的边界范围内。

一个栗子:

如果一个 view 原本的中心点是 [100, 100] ,向右向下各平移 100 个单位,即 x + 100 , y + 100 后,中心点坐标就变成了 [200, 200] ,这时候我们点击 [200, 200] 这个点后,经过“反平移”,即 x - 100 , y - 100 后,变成了 [100, 100] ,这个点正是 view 做动画前的中心点,在该 view 的边界范围内。

那为什么属性动画可以这样,补间动画就不行呢?

viewdraw 的时候,会检测是否设置了 Animation(补间动画) ,如果有的话,会获取这个动画当前的值(旋转或位移或缩放,透明度等),应用到 canvas 上,然后把内容 draw 出来。它的作用只会在 draw 的时候有效。

为什么属性动画移动一个控件后,目标位置仍然能响应用户事件?相关推荐

  1. android 一分钟倒计时动画,Android利用属性动画自定义倒计时控件

    本文介绍一下利用属性动画(未使用Timer,通过动画执行次数控制倒计时)自定义一个圆形倒计时控件,比较简陋,仅做示例使用,如有需要,您可自行修改以满足您的需求.控件中所使用的素材及配色均是笔者随意选择 ...

  2. RelativeLayout里各个控件的相对位置

    RelativeLayout相对布局 RelativeLayout是一种相对布局,控件的位置是按照相对位置来计算的,后一个控件在什么位置依赖于前一个控件的基本位置,是布局最常用,也是最灵活的一种布局. ...

  3. WPF中一个控件绑定另一个控件的属性

    原文:WPF中一个控件绑定另一个控件的属性 如同一个Grid中的一个按钮根据另一个按钮的显示与否作出不同的响应: 绑定的时候通过ElementName来指定控件 <Grid Margin=&qu ...

  4. 刷新后控制TAB键到下一个控件

    页面上的控件能一直TAB下去,这是系统的一个很基本的要求.在网上没有搜索到相关的方法.我觉得一般做法都是使页面无刷新,但是如果遇到页面不得不刷新的情况,如何去控制呢?    思路是很简单的,首先是获取 ...

  5. 怎么把一个控件放到tab页面上去?_C/C++应用无障碍化如何支持Tab键浏览

    一.前言 我们知道,正常人操作电脑,只需一眼便能得知屏幕上的内容,要想激活某个控件,例如按钮等,只需将鼠标拖动过去点击即可. 但这对于盲人而言,却十分繁琐. 盲人使用屏幕阅读器来操作电脑,在使用某个软 ...

  6. android 水滴动画效果图,Android控件实现水滴效果

    看到ios版上QQ刷新效果像水滴,然后自己也想着去实现这样的效果,这篇文章暂时没有介绍下拉刷新的效果,只是单独用一个控件来实现这样的水滴效果. 效果图如下: 一.总体思路 1.画两个圆形,其中一个就是 ...

  7. android 取消控件焦点,C# 给一个控件去掉焦点

    给一个控件去掉焦点(如选中控件按钮button时,按钮出现方框显示): 例如给form这个窗体中的button按钮去焦点 1.首先在form这个窗体中拖一个label按钮,去文字,设置背景为透明: 2 ...

  8. android让一个控件跟上面控件对其,学个明白--Android控件架构

    Android控件架构 1.什么是View? View是Android中所有控件的基类.View是界面层的控件的一种抽象,它代表了一个控件.在Android中每个控件都会在界面中占得一块矩形的区域.在 ...

  9. Silverlight带关闭动画的内容控件,可移动的内容控件(一)

    本例给大家介绍两个自定义控件,一个有显示和关闭两种状态,在状态切换时有动画效果.另外一个是可以拖动的内容控件,可以制作能拖动的面板. A.带关闭动画的内容控件. .xaml View Code < ...

最新文章

  1. 17秋 软件工程 第六次作业 Beta冲刺 总结博客
  2. [C/C++标准库]_[初级]_[优先队列priority_queue的使用]
  3. python绘制动态模拟图-Python 模拟生成动态产生验证码图片的方法
  4. nginx + uwsgi + Django 应用部署
  5. Struts2第十一篇【简单UI标签、数据回显】
  6. 大商超的2020:转型、收紧、试新
  7. SpringBoot响应Json数据乱码通过配置解决
  8. 风变python基础语法第11关_Python基础语法学习笔记之风变第十四关项目实操
  9. 牛客网编程练习之编程马拉松:解读密码
  10. 选择座位html,影厅座位预览效果(css3)_html/css_WEB-ITnose
  11. 1.1为什么选择序列模型
  12. 白帽子讲Web安全(第 10 章 访问控制)
  13. 百数巡检领域系统能力展示
  14. 网站一直被大流量DDOS攻击,服务器被打死了怎么办?
  15. 2022年上半年网络工程师上午真题及答案
  16. 爬虫抓包问题全面分析
  17. 还在找各种便签软件?Windows10自带的便签足矣
  18. 前端性能优化:1.什么是前端性能优化
  19. 使用vue-cli脚手架工具创建vue项目
  20. python调用百度接口实现ocr识别_Python 3调用百度OCR API实现剪贴板文字识别

热门文章

  1. 政务内网、政务专网和政务外网名词解释
  2. 本地模拟公网(外网)
  3. 众昂矿业:选矿和浮选技术决定萤石品位高低
  4. 零设备基础:扫描二维码就能巡检!
  5. 卷积神经网络典型应用———AlexNet
  6. 基于java学生考勤管理系统设计——计算机毕业设计
  7. 安卓系统之旅——最全的Android源码目录结构
  8. jQuery对象与js对象之间的转换
  9. [Android] 混音器AudioMixer
  10. [Unity] C#使用委托和事件实现Unity消息中心(观察者模式)