首页 文章

使用Android,将画布大小限制为使用layoutparams指定的View的大小

提问于
浏览
0

创建自定义视图并覆盖它的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 回答

  • 0

    一种解决方案是从活动中获取维度并将其传递给视图 .

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    

    metrics.widthPixels 将获得所需的宽度

  • 0

    致@Luksprog致said . 有了这些信息,我能够弄清楚以下内容:

    getLayoutParams() . width / getLayoutParams() . height - 可以包含以下任何一个值

    • LayoutParams.WRAP_CONTENT(其值为-2)

    • LayoutParams.MATCH_PARENT(其值为-1)或

    • 视图属性(在XML中)layout_width中指定的宽度

    getMeasuredWidth()/ getMeasuredHeight()(也是onMeasure()的i / p参数) - 这个视图的最大大小可以在PIXELS中明显占用 .

    因此回答我自己的问题:我们需要使用这些方法在onMeasure()中添加逻辑来限制画布大小,因为链接到这个帖子的问题或者你自己的计算来调整画布的大小!

相关问题