You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:ImageView旋转后getX()与getY()返回值的疑问

关于旋转后ImageView的getX()/getY()返回值的解释

嗨,这个问题我之前做自定义View交互的时候也踩过坑,刚好可以给你讲明白~

这些返回值到底是什么?

当你对imgv1执行旋转操作后,getX()和getY()返回的是旋转后View的轴对齐包围盒(bounding box)的左上角相对于父容器的坐标。这个包围盒是能完全容纳旋转后View视觉内容的最小矩形,而且它的边是和父容器坐标系平行的(不会跟着View旋转)。

为什么不再是原来的(x,y)?

Android中View的位置相关方法(包括getX()/getY()、getLeft()/getTop())都是基于轴对齐矩形来计算的,不会考虑View本身的旋转、倾斜等变换。当你旋转View后,它的视觉内容会偏离初始的轴对齐矩形,系统会自动计算出一个新的轴对齐包围盒来包裹住旋转后的内容,getX()/getY()就对应这个新包围盒的左上角位置,自然和初始的(x,y)不一样了。

举个你的布局例子:imgv1初始是300dp宽、200dp高,通过layout_gravity居中显示。当你旋转它90度后,视觉内容会变成竖版的200dp宽、300dp高,这时候系统生成的包围盒就是200dp×300dp的矩形,它的左上角位置会围绕原中心偏移,所以getX()和getY()的数值就会和初始值不同。

是不是返回旋转后矩形最左侧/最上方的坐标?

完全正确!你猜的没错。这个“旋转后矩形”就是刚才说的轴对齐包围盒,getX()就是这个矩形最左侧的x坐标,getY()就是这个矩形最上方的y坐标——不管View旋转多少度,这个矩形始终是和父容器坐标系平行的,所以它的边缘方向不会变。

内容的提问来源于stack exchange,提问作者TJ1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:18:58