Android 自定义视图:告诉子级父级有另一个大小
我有一个自定义视图(ViewGroup),它将从width=0dp设置为width=300dp。 我想在画完画布的子对象后再对其进行操作。为了实现这一点,我将覆盖dispatchDraw(画布)。 但是,我希望在300dp画布上渲染子对象,即使自定义视图的大小较小。 将较大的画布传递给dispatchDraw(canvas)方法时,子对象不会调整其位置和大小 我的问题是,如何“伪造”视图组的更大宽度,以便在更大的曲面上渲染子对象 问候,, Robert每次视图(包括视图组)需要自行绘制时,都会调用onMeasure方法以获取其尺寸。之后,调用onLayout以获取将绘制的位置。在draw方法中不会发生这种情况,因为它们是在onMeasure和onLayout之后调用的,请参见。将onMeasure相加计算尺寸,onLayout设置位置,最后onDraw进行渲染。因此,最好的办法是使用onMeasure来设置所需的尺寸。例如,这是一个onMeasure方法,它会告诉子视图其尺寸应该正好是300 x 150像素:Android 自定义视图:告诉子级父级有另一个大小,android,android-custom-view,Android,Android Custom View,我有一个自定义视图(ViewGroup),它将从width=0dp设置为width=300dp。 我想在画完画布的子对象后再对其进行操作。为了实现这一点,我将覆盖dispatchDraw(画布)。 但是,我希望在300dp画布上渲染子对象,即使自定义视图的大小较小。 将较大的画布传递给dispatchDraw(canvas)方法时,子对象不会调整其位置和大小 我的问题是,如何“伪造”视图组的更大宽度,以便在更大的曲面上渲染子对象 问候,, Robert每次视图(包括视图组)需要自行绘制时,都会调
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSpec;
int heightSpec;
widthSpec = MeasureSpec.makeMeasureSpec(300, MeasureSpec.EXACTLY);
heightSpec = MeasureSpec.makeMeasureSpec(150, MeasureSpec.EXACTLY);
llTopBar.measure(widthSpec, heightSpec); //<-- llTopBar is the child...
super.onMeasure(widthMeasureSpec, heightMeasureSpec); //<--This is important
}
@覆盖
测量时的保护空隙(内部宽度测量等级、内部高度测量等级){
int-widthSpec;
国际高度规范;
widthSpec=MeasureSpec.MakeMasureSpec(300,精确测量);
heightSpec=MeasureSpec.MakeMasureSpec(150,精确测量);
llTopBar.测量(宽度规格、高度规格)//