View.setX()、View.setRotation()和View.getWidth()是如何相对工作的



在Android中,我正在创建一个自定义布局。它包含一个我需要定位、旋转然后精确测量的视图。

如果我有一个10x10px的视图,我将10px向右移动,10px向下移动,然后旋转45度,那么视图将测量自己的宽度,以及它的精确位置?

view.setX(10)
view.setY(10)
view.setRotation(45)
view.measure(widthSpec, heightSpec)

它还会报告10px的宽度吗,还是会考虑它的旋转?x和y坐标是否与旋转的角对齐,还是保持固定?

rotationtranslationXtranslationYtranslationZscaleXscaleY-这些都是Canvas属性。这意味着,在视图相对于视图的xy位置进行测量和布局后,您会告诉Android在哪里绘制视图。这些属性不会影响默认的测量例程(除非您在自定义视图中覆盖onMeasure并将其考虑在内,但我强烈建议您不要这样做)。因此,更改任何这些属性都不会影响视图测量

xy-是布局属性。这意味着该视图的父级决定将其相对于自身定位在何处,因此,如果在调用onLayout之前设置这些值,则这些值将被父级覆盖。如果在onLayout之后覆盖xy,则可以更改此视图在其父视图中的位置。但如果你追求这个效果,我宁愿使用translationXtranslationY属性,因为下一次onLayout调用将再次重置xy

但为了回答您最初的问题——是的,它将报告10px作为其宽度。上述任何属性都不会实际影响报告的视图的宽度或高度

EDIT正如Dave所指出的,我关于xy在布局过程中被覆盖的原始声明实际上并不正确。设置xy属性将在内部设置translationXtranslationY,因此更新这些属性实际上与更新翻译相同

最新更新