Android 自定义视图和画布大小

Posted

技术标签:

【中文标题】Android 自定义视图和画布大小【英文标题】:Android Custom view and canvas size 【发布时间】:2012-10-20 14:01:12 【问题描述】:

我创建了一个自定义视图,它创建了一个位图,然后在onDraw() 方法中我显示了一个对象数据。

在 XML 文件中,我还让视图可以水平滚动。

我的问题是,在我通过onDraw() 方法在画布上绘制了所有数据之后,如何增加视图的大小以显示所有数据。

即,我希望视图滚动到足够多,直到数据完成,而不是更多。

我确实有显示最后一个项目的 y 坐标。

目前我在 XML 文件中将视图的宽度设置为 800dp,但对于某些对象,它会截断一些数据。

谢谢

【问题讨论】:

我还研究了在构造函数中设置布局参数我应该在 onDraw() 方法中这样做吗? 【参考方案1】:

您可以覆盖onMeasure() 方法来调整View 的大小:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    int parentViewWidth = MeasureSpec.getSize(widthMeasureSpec);
    int parentViewHeight = MeasureSpec.getSize(heightMeasureSpec);
    // ... take into account the parent's size as needed ...
    super.onMeasure(
        MeasureSpec.makeMeasureSpec(newWidth, MeasureSpec.EXACTLY), 
        MeasureSpec.makeMeasureSpec(newHeight, MeasureSpec.EXACTLY));

【讨论】:

谢谢,我回家试试。 嗨,我已经尝试过实现它,但到目前为止我还没有运气。我的自定义布局放在线性布局下,当我放置上面的代码时,我得到一个空白屏幕。 基本上在 onDraw 方法之后我有一个大约 900 的 y 值浮点数。然后我想用这个值来设置视图宽度。 我认为可以安全地删除 LinearLayout。您能否发布一些您的代码,以便我们了解您是如何集成onMeasure() 的? newWidthnewHeight 使用什么值? 不,如果我取出线性布局,视图不会显示。 newWidth 的值是在 onDrawMethod 之后获得的,对于大多数对象,它大约是 900,尽管对于某些对象,它可能低至 300。

以上是关于Android 自定义视图和画布大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Android自定义视图中的属性设置调整膨胀布局的大小?

在Android中绘制动态自定义视图棋盘

ListView 不使用自定义视图更新大小

在 appwidget 中调整自定义视图大小的问题,无法确定 android 上的实际大小 appwidget,尤其是在平板电脑上

调用ondraw后重置画布,然后再在android中调用它

在 Swift 中测试自定义视图