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()
的? newWidth
和 newHeight
使用什么值?
不,如果我取出线性布局,视图不会显示。 newWidth 的值是在 onDrawMethod 之后获得的,对于大多数对象,它大约是 900,尽管对于某些对象,它可能低至 300。以上是关于Android 自定义视图和画布大小的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Android自定义视图中的属性设置调整膨胀布局的大小?
在 appwidget 中调整自定义视图大小的问题,无法确定 android 上的实际大小 appwidget,尤其是在平板电脑上