Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义视图:告诉子级父级有另一个大小_Android_Android Custom View - Fatal编程技术网

Android 自定义视图:告诉子级父级有另一个大小

Android 自定义视图:告诉子级父级有另一个大小,android,android-custom-view,Android,Android Custom View,我有一个自定义视图(ViewGroup),它将从width=0dp设置为width=300dp。 我想在画完画布的子对象后再对其进行操作。为了实现这一点,我将覆盖dispatchDraw(画布)。 但是,我希望在300dp画布上渲染子对象,即使自定义视图的大小较小。 将较大的画布传递给dispatchDraw(canvas)方法时,子对象不会调整其位置和大小 我的问题是,如何“伪造”视图组的更大宽度,以便在更大的曲面上渲染子对象 问候,, Robert每次视图(包括视图组)需要自行绘制时,都会调

我有一个自定义视图(ViewGroup),它将从width=0dp设置为width=300dp。 我想在画完画布的子对象后再对其进行操作。为了实现这一点,我将覆盖dispatchDraw(画布)。 但是,我希望在300dp画布上渲染子对象,即使自定义视图的大小较小。 将较大的画布传递给dispatchDraw(canvas)方法时,子对象不会调整其位置和大小

我的问题是,如何“伪造”视图组的更大宽度,以便在更大的曲面上渲染子对象

问候,, Robert

每次视图(包括视图组)需要自行绘制时,都会调用onMeasure方法以获取其尺寸。之后,调用onLayout以获取将绘制的位置。在draw方法中不会发生这种情况,因为它们是在onMeasure和onLayout之后调用的,请参见。将onMeasure相加计算尺寸,onLayout设置位置,最后onDraw进行渲染。因此,最好的办法是使用onMeasure来设置所需的尺寸。例如,这是一个onMeasure方法,它会告诉子视图其尺寸应该正好是300 x 150像素:

@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.测量(宽度规格、高度规格)//