我误会Android绘制了
xx
背景 #
需求涉及到创建View,要求能在指定位置创建View。
在此之前的理解是需要等到View attach到window上才能获取到View的宽高。按照这种思路,先创建一个View,添加到父View,再调整View的位置,尝试后效果不是很理想,会有View位置的变化,视觉上看有闪烁的效果。
尝试通过ChatGPT解决,有了以下对话:
与ChatGPT的问话
View的绘制是可以在外部调用的,方法声明public。
所以,View设置内容后可以调用一遍measure方法以确定大小。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| private fun fixedPosition(view: View) {
view.layoutParams = FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
view.measure(
View.MeasureSpec.UNSPECIFIED,
View.MeasureSpec.UNSPECIFIED
)
val viewWidth = view.measuredWidth
val viewHeight = view.measuredHeight
val layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT, // 宽度
FrameLayout.LayoutParams.WRAP_CONTENT // 高度
).apply {
marginStart = (x - viewWidth / 2).toInt() // 左边界坐标
topMargin = (y - viewHeight / 2).toInt() // 上边界坐标
}
view.layoutParams = layoutParams
}
|
事后反思是因为先入为主的观念,认为既然View的绘制发生在View内部,就不能允许在外部调用。至于是不是这样,没有深入研究,值得注意。