gpt4 book ai didi

android - 如何在不丢失以前绘制的对象的情况下在 android Canvas 上绘制?

转载 作者:行者123 更新时间:2023-11-29 14:14:54 30 4
gpt4 key购买 nike

在 android 中,是否可以在 Canvas 上绘制一些东西,然后在同一个 Canvas 上绘制其他东西而不会丢失之前绘制的对象?

详细信息:

  • 显示可绘制对象(基于图像 url)。
  • 点击一个节点后,再显示 5 个节点(显示哪些可绘制对象由远程 API 调用决定)。
  • 现在点击 5 个节点中的任何一个将按照相同的步骤显示另外 5 个节点等。

我已经到了点击第一个可绘制对象并获取另外 5 个可绘制对象的地步。但是当我平移 Canvas 并渲染 5 个节点(调用 OnDraw)时,第一个可绘制对象消失了(预期)。我不想再次绘制所有节点。

1) 那么如何追加到同一个 Canvas 上呢?

2) canvas.concat 是可行的方法吗?如果是这样,关于如何使用它的任何指示?

我的 OnDraw 方法:

public void onDraw(Canvas canvas) {
super.onDraw(canvas);

canvas.save();
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor);
this.canvas = canvas;
canvas.translate(50,50);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
canvas.restore();
}

更新 1:我发现这只能通过解决方法来实现。基本上,我需要在 onDraw 之外创建一个位图/ Canvas ,在这个新 Canvas 上绘制我的可绘制对象,然后,完成后,在 onDraw 提供的 Canvas 上绘制这个预绘制的位图。但这种方法的问题是,当我创建位图时,我需要提供一个维度。但是节点的大小可以增长,并且不能保证我可以容纳 1000x1000 以内的增长节点。分配更大的数字可能会导致内存不足。因此,除非有办法使位图尺寸与 Canvas 匹配(不切实际吗?)我需要在这里更改我的方法(SurfaceView?)...欢迎提出建议。

    mBitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);

最佳答案

在调用 onDraw(Canvas canvas) 函数之前,您是否调用了“canvas.drawColor(your_background_color)”??如果你这样做,只需删除那条线,这将按照你指定的颜色清洁你的 Canvas 。

关于android - 如何在不丢失以前绘制的对象的情况下在 android Canvas 上绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23599308/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com