有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android画布不呈现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{}方法?为什么不能开箱即用

我看到javadocs表示“在调用这个函数之前,视图必须已经完成了完整的布局。”也许这是我的问题?如何在FrameLayout上“进行完整布局”


共 (1) 个答案

  1. # 1 楼答案

    我成功了。它错过了对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