[英]Android Canvas not rendering Framelayout
我正在尝试将FrameLayout
绘制到画布上,但无法使其正常工作。 绘制ImageView
效果很好,所以我不确定我缺少什么。
这是我尝试绘制FrameLayout
的一种方式的示例:
@Override
protected void onDraw(Canvas canvas) {
Context activity = this.getContext();
FrameLayout.LayoutParams cellParams = new FrameLayout.LayoutParams(100, 100);
ImageView cloud = new ImageView(activity);
cloud.setLayoutParams(cellParams);
cloud.setImageResource(R.drawable.transparent_cloud_large);
FrameLayout gameTile = new FrameLayout(activity);
gameTile.addView(cloud);
gameTile.layout(100, 200, 200, 300);
gameTile.draw(canvas);
}
我也尝试不设置ImageView
LayoutParams
,而是使用: cloud.layout(0, 0, 100, 100);
,但这两种方法均无效。
这是我的ImageView
的代码,它可以正常工作。
@Override
protected void onDraw(Canvas canvas) {
Context activity = this.getContext();
ImageView image = new ImageView(activity);
image.setImageResource(R.drawable.transparent_cloud_large);
image.layout(100, 100, 200, 200);
image.draw(canvas);
}
我是否需要以某种方式覆盖FrameLayout's
draw
方法? 为什么开箱即用?
我看到javadocs说:“在调用此函数之前,视图必须已经完成了完整的布局。” 也许那是我的问题? 如何在FrameLayout
上“完整布局”?
我知道了。 它错过了measure
的电话。 这是我最终使用的:
GameTile gameTile = square.getGameTile();
gameTile.measure((int)tilePixels, (int)tilePixels);
gameTile.layout(0, 0, 0, 0);
canvas.save();
canvas.translate(coor.getX() * tilePixels, coor.getY() * tilePixels);
gameTile.draw(canvas);
canvas.restore();
GameTile
是FrameLayout
的子类。 save
, translate
和restore
方法用于将FrameLayout
放置在画布上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.