网上有不少人把view的坐标和点击事件的坐标 混为一谈
一、View的相关坐标和位置
先来看一张图,对这几个值有个大概了解,下面再进行详细的分析
先来了解一个概念:
view动画不改变view的真实位置,就是肉眼看上去,view位置发生了变化,但是它的点击区域还是在原来的位置。
为了方便描述,下文中的的真实view,表示真实位置的view,看到的View,表示肉眼看到的view
属性动画和setTranslationX/setTranslationY ,会改变显示位置和真实位置
上图中view1是初始位置,通过执行setTranslation函数,得到的view2位置,其中left,top,right,bottom这几个值不会改变
1、left,top,right,bottom
View 的位置主要由它的四个顶点的位置来决定,分别对应 View 的四个属性:left top right bottom。对应的函数是getLeft,getTop,getRight,getBottom
left: View 左上顶点相对于父容器的横坐标
top: View 左上顶点相对于父容器的纵坐标
right: View 右下顶点相对于父容器的横坐标
bottom: View 右下顶点相对于父容器的纵坐标
这几个值表示的是view的真身位置,它表示哪里,点击区域就在哪里。和肉眼在屏幕上看到的位置可能不一样
2、 X,Y
上面说到view动画不改变view的真实位置(也就是不改变view的left,top,right,bottom)。
看到的view相对于真实view,位置发生了变化,但是它的点击区域还是在真实view的位置。
从 Android 3.0 开始,View 增加了 x,y,translationX 和 translationY。
x,y 是看到的view的左上角相对父容器的坐标,但不同于 left 和 top ,这两个坐标点的值并一定都是相等的。
真实view 和 看到view的偏差用 translationX 和 translationY 来表示
3、 translationX,translationY
android开发艺术探索中,关于translationX的讲解是错误的。真实情况是,translationX是真实view 相对于看到view的 x 方向偏移量
从上图可以得知:x = left + translationX
二、点击事件的XY坐标
参考:
View坐标系
Android - 区分 View 的 translationX、Y , X、Y 和 Left、Top,Right、Bottom
关注我的公众号,轻松了解和学习更多技术