Android Canvas无法渲染Framelayout

时间:2014-05-20 03:42:09

标签: java android android-canvas

我正在尝试将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上进行“完整布局”?

1 个答案:

答案 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();

GameTileFrameLayout的子类。 savetranslaterestore方法用于在屏幕上定位FrameLayout