创建自定义视图并覆盖它的onDraw() .
-
如果没有覆盖onMeasure()画布占据整个设备屏幕 .
-
覆盖onMeasure(),将canvas重新调整为传递给setMeasuredDimension()的维度 .
因此我们可以确保调整画布大小,并且必须在onMeasure()中完成 .
我想将自定义视图的画布重新调整为其LayoutParams(XML或Java)中指定的大小
现在需要方法/属性,它将返回LayoutParams中提到的大小参数以传递setMeasuredDimension() .
-
getWidth()/ getHeight() - 仅在第一次传递onMeasure()后设置值
-
getLayoutParams() . width / getLayoutParams() . height - 不确定此值何时返回有效值(设置params以编程方式给出值'-1')
-
getMeasuredWidth()/ getMeasuredHeight() - 仅当在XML中设置时才返回布局参数中指定的大小参数,而不是以编程方式分配 .
是否有任何其他保证方法将返回已在customview的布局参数中设置的宽度和高度或getMeasuredWidth()/ getMeasuredHeight()是传递setMeasureDimensions()的正确选择?
可能是Android Custom View Size的副本
2 回答
一种解决方案是从活动中获取维度并将其传递给视图 .
metrics.widthPixels
将获得所需的宽度致@Luksprog致said . 有了这些信息,我能够弄清楚以下内容:
getLayoutParams() . width / getLayoutParams() . height - 可以包含以下任何一个值
LayoutParams.WRAP_CONTENT(其值为-2)
LayoutParams.MATCH_PARENT(其值为-1)或
视图属性(在XML中)layout_width中指定的宽度
getMeasuredWidth()/ getMeasuredHeight()(也是onMeasure()的i / p参数) - 这个视图的最大大小可以在PIXELS中明显占用 .
因此回答我自己的问题:我们需要使用这些方法在onMeasure()中添加逻辑来限制画布大小,因为链接到这个帖子的问题或者你自己的计算来调整画布的大小!