调整自定义视图的报告尺寸以包括绘制的图形

朱莉安娜。

我有一个自定义视图类(称为FooView),用作XML布局的根元素。FooView在中onDraw(),用于canvas在的底部边缘绘制形状FooView

我认为,为了FooView不中断形状,我需要重写它onMeasure并做一些修改所FooView报告的高度的操作,以使其现在包括所绘制形状的高度。

那是对的吗?如果是这样,我该怎么办?

谢谢!

凯文·科波克

是的,如果要创建自定义视图,则需要覆盖onMeasure()并提供所需的大小。

因此,在的方法签名中onMeasure,您将获得两个参数:

  • widthMeasureSpec
  • heightMeasureSpec

您应该使用MeasureSpec该类来获取在调整View大小时应遵守的限制。

/*
 * This will be one of MeasureSpec.EXACTLY, MeasureSpec.AT_MOST, 
 * or MeasureSpec.UNSPECIFIED
 */
int mode = MeasureSpec.getMode(measureSpec);

//This will be a dimension in pixels
int pixelSize = MeasureSpec.getSize(measureSpec);

如果得到MeasureSpec.EXACTLY,则pixelSize无论如何都应使用该值作为测得的宽度。

如果得到MeasureSpec.AT_MOST,您应该确保将测量宽度设置为不大于pixelSize

如果得到MeasureSpec.UNSPECIFIED,您可以根据需要容纳更多空间。我通常将其解释为WRAP_CONTENT

因此,您的onMeasure()方法可能如下所示:

@Override
protected void onMeasure (int widthSpec, int heightSpec) {
    int wMode = MeasureSpec.getMode(widthSpec);
    int hMode = MeasureSpec.getMode(heightSpec);
    int wSize = MeasureSpec.getSize(widthSpec);
    int hSize = MeasureSpec.getSize(heightSpec);

    int measuredWidth = 0;
    int measuredHeight = 0;

    if (wMode == MeasureSpec.EXACTLY) {
        measuredWidth = wSize;
    } else {
        //Calculate how many pixels width you need to draw your View properly
        measuredWidth = calculateDesiredWidth();

        if (wMode == MeasureSpec.AT_MOST) {
            measuredWidth = Math.min(measuredWidth, wSize);
        }
    }

    if (hMode == MeasureSpec.EXACTLY) {
        measuredHeight = hSize;
    } else {
        //Calculate how many pixels height you need to draw your View properly
        measuredHeight = calculateDesiredHeight();

        if (hMode == MeasureSpec.AT_MOST) {
            measuredHeight = Math.min(measuredHeight, hSize);
        }
    }

    setMeasuredDimension(measuredWidth, measuredHeight);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不同设备的自定义视图尺寸

来自分类Dev

如果onMeasure()选择最小尺寸AT_MOST,则不会绘制自定义视图布局

来自分类Dev

自定义卡片视图形状

来自分类Dev

自定义视图未绘制

来自分类Dev

绘制多个自定义视图

来自分类Dev

自定义视图不会绘制位图

来自分类Dev

在自定义Eclipse视图中绘制

来自分类Dev

绘制自定义视图的正确方法?

来自分类Dev

在Matlab中以自定义尺寸导出图形

来自分类Dev

如何在Apple Watch上绘制自定义图形?

来自分类Dev

在Windows Phone 8.1应用中绘制自定义图形

来自分类Dev

如何使用自定义轴绘制图形

来自分类Dev

python用自定义文本绘制图形

来自分类Dev

Android自定义图像视图形状

来自分类Dev

自定义基于视图的nstableview调整大小

来自分类Dev

调整Fullcalendar中的自定义视图,作者Adam Shaw

来自分类Dev

使用多行 UILabels 自动调整自定义视图的大小

来自分类Dev

自定义视图:画布绘制方法给出API错误

来自分类Dev

自定义视图未绘制到屏幕范围之外

来自分类Dev

在android中的自定义图片视图上绘制

来自分类Dev

自定义视图未在GridLayout中绘制

来自分类Dev

Win32自定义绘制树视图控件

来自分类Dev

使用Android自定义视图实时绘制图

来自分类Dev

Android-测试自定义视图是否正确绘制?

来自分类Dev

Android的绘制自定义视图,如谷歌付费

来自分类Dev

如何通过使用自定义视图绘制位图

来自分类Dev

自定义视图到Toast中-不绘制

来自分类Dev

自定义视图按钮的onDraw()方法不会绘制

来自分类Dev

Android:以编程方式绘制自定义视图