在 Android 中,我正在创建自定义布局。它包含一个我需要定位、旋转然后精确测量的 View 。
如果我有一个 10x10 像素的 View ,我向右移动 10 像素,向下移动 10 像素,然后旋转 45 度,那么该 View 将测量自己的宽度以及它的精确位置?
view.setX(10)
view.setY(10)
view.setRotation(45)
view.measure(widthSpec, heightSpec)
它仍然会报告 10px 作为其宽度,还是会考虑其旋转? x 和 y 坐标是否与旋转角对齐,还是保持固定?
最佳答案
旋转
、translationX
、translationY
、translationZ
、scaleX
、scaleY
- 这些是 Canvas 属性。这意味着您告诉 Android 在测量 View 并相对于 View 的 x 和 y 位置进行布局之后在何处绘制 View 。这些属性不会影响默认测量例程(除非您在自定义 View 中覆盖 onMeasure
并将这些考虑在内,但我强烈不建议这样做)。因此,更改任何这些属性都不会影响 View 测量
x
、y
- 是布局属性。这意味着该 View 的父 View 决定其相对于自身的位置,因此如果您在调用 onLayout
之前设置这些值 - 这些值将被父 View 覆盖。如果您覆盖 x
和 y
after onLayout
- 您可以更改此 View 在其父级中的位置。但如果你追求这种效果 - 我宁愿使用 translationX
和 translationY
属性,因为下一个 onLayout
调用将重置 x
和 y
再次。
但是要回答您原来的问题 - 是的,它将报告 10px
作为其宽度。上述属性实际上都不会影响 View 的报告宽度或高度
编辑 正如 Dave 指出的,我关于 x
和 y
在布局期间被覆盖的原始声明并不正确。设置 x
和 y
属性将在内部设置 translationX
和 translationY
,因此更新这些属性实际上与更新相同翻译
关于android - View.setX()、View.setRotation() 和 View.getWidth() 相互之间如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575443/