繁体   English   中英

Android Canvas无法呈现Framelayout

[英]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();

GameTileFrameLayout的子类。 savetranslaterestore方法用于将FrameLayout放置在画布上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM