如何在Android画布上绘制而不会丢失以前绘制的对象?

时间:2014-05-12 00:12:15

标签: android android-layout android-canvas

在android中,是否可以在画布上绘制一些东西,然后在不丢失先前绘制的对象的情况下将其他东西绘制到同一画布上?

详情

  • 显示drawable(基于图片网址)。
  • 单击节点后,再显示5个节点(要显示的可绘制内容由远程api调用确定)。
  • 现在点击5个节点中的任何一个将按照相同的步骤显示另外5个节点&等等。

我已经达到了点击第一个drawable&提取了5个drawables。但是,当我翻译画布&渲染5个节点(调用OnDraw),第一个drawable消失了(预期)。我不想再次绘制所有节点。

1)那么如何追加到同一个画布?

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();
}

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

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

1 个答案:

答案 0 :(得分:-1)

你打电话给" canvas.drawColor( your_background_color )" 之前你调用onDraw(Canvas canvas)函数?如果您这样做,只需删除该行,这将清除您指定的颜色。