android - View.setX()、View.setRotation() 和 View.getWidth() 相互之间如何工作?

标签 android android-layout

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

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

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

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

最佳答案

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

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

但是要回答您原来的问题 - 是的,它将报告 10px 作为其宽度。上述属性实际上都不会影响 View 的报告宽度或高度

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

关于android - View.setX()、View.setRotation() 和 View.getWidth() 相互之间如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575443/

相关文章:

java - Android 后退操作按钮导致应用程序崩溃

android - 如何从android中的图库中检索图片?

android - 是否可以使 LazyRow/LazyColumn 在屏幕上显示一定数量的项目,而无需传入显式 DP 宽度

android - 针对 NexusOne/Nexus 为 Nexus 4/Nexus 7 提供布局资源

android - 无法在 Titanium 中使用相机

android - 在运行时更改抽屉导航项目

android - 如何将子项目添加到 RecyclerView 的最后一个项目?

java - 使用 builder.setView() 设置 AlertDialog 宽度以适合固定大小 imageview 的大小

android - 线性布局 : How to position elements

android - 框架和相对布局之间的区别?