我正在尝试将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);
}
我也在尝试不为LayoutParams
设置ImageView
,而是使用: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
上进行“完整布局”?
答案 0 :(得分:0)
我得到了它的工作。它错过了对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
。