我有一些很奇怪的问题。
第一个问题如下:我阅读了如何覆盖onMeasure()。我做到了。我原以为当我在onMeasure中设置宽度/高度时,它们在onDraw中是完全相同的,但显然不是这样的。另外,除了measuredWidth在绘制阶段将与宽度相同,但这也不是真的。
onMeasure可以被多次调用。在每次调用时,我都使用计算出的宽度和高度调用setMeasuredDimension。例如,我的第一次观点应该是480 x 245,在第二次调用时,我会根据父母的情况重新计算,并且应该是90x245。
让我感到惊讶的是,android只是忽略了一切,除了第一次调用。所以在这个例子中,我的最终视图大小是480 x 245。
第二个问题如下:我的视图高度是match_parent,我的父高度是0。那么,当我不知道的时候,怎么才能在onMeasure上设置正确的高度呢?
你知道如何让安卓不忽视我的setMeasureDimensions调用和如何设置match_parent吗?
发布于 2014-08-18 19:41:59
分配给视图的空间并不仅取决于所测量的大小,以下是流程的快照:
View.onMeasure。您得到的MeasureSpec实际上是您最多可以占用多少空间(非常概括)。setMeasuredDimension。onLayout,您应该根据对您受影响的维度在此过程中布局您的子级。View将被绘制出来,即View.dispatchDraw正在被调用,并导致对onDraw的简单视图。如果你是ViewGroup,画自己也意味着画你的孩子。Canvas,该Canvas的尺寸是屏幕上的这些尺寸,并且使用翻译和剪裁,画布沿视图传递,以便它们自己绘制。这避免了抽签时的分配。由于这个原因,如果您想知道什么空间是专用于您的,您不应该使用Canvas.getWidth或Canvas.getHeight,这是屏幕的尺寸,而是检索剪裁尺寸(Canvas.getClipBounds())。View.getWidth或View.getHeight),但是它们可能不同,例如,如果画布被缩放。因此,总结一下:
onMeasure的目的,是确定孩子的大小,这样ViewGroup就可以计算出他们的头发大小。onLayout的目的是影响每个视图的宽度和高度,并传播到子视图。onDraw的目的是呈现您的视图。https://stackoverflow.com/questions/25369297
复制相似问题