如何在Android中动态绘制位图到Canvas?

时间:2015-07-14 16:46:09

标签: android canvas bitmap

以下是该问题的情景。 一个自定义视图,它是我需要绘制的画布。 它下面有2个按钮,可以叫它们A和B. 单击A时 - >图像A被绘制到上面的画布上。 点击B时 - >图像B被绘制到上面的画布上。

该问题要求必须保留先前在画布上绘制的图像。也就是说,如果单击按钮A后跟按钮B,则画布必须包含两个图像。因此需要保留以前的图像。

问题:你是如何实现这一目标的? 可能的解决方案1:创建一个ArrayList并继续向此arrayList添加图像。将更新后的arrayList传递给canvas onDraw方法,并为每次单击按钮重绘每个图像。

可能的解决方案2:必须有一些方法来保持画布的状态,以便在每个按钮上单击您在画布的最后保留状态上绘制并仅绘制新图像。

进一步要求:可以拖动绘制到画布的图像,因此需要跟踪更新的位置。

我陷入僵局,无法找到一本好的教程或一本书来处理这样的要求,任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以创建位图,并在其上绘制您想要的内容。

Bitmap mBitmap;

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    super.onLayout(changed, left, top, right, bottom);
    if (changed) {
        if (mBitmap != null) {
            mBitmap.recycle();
            mBitmap = null;
        }
        mBitmap = Bitmap.createBitmap(right - left, bottom - top, Bitmap.Config.ARGB_8888);
        redrawAllYourStuffTo(mBitmap);
    }
}

按下按钮时,您可以直接绘制到位图,如下所示:

Canvas canvas = new Canvas(mBitmap);
canvas. ... // draw operations.

// after the bitmap canvas drawing finished, call
invalidate();
onDraw 中的

只绘制你的位图

protected void onDraw(Canvas canvas) {
   canvas.drawBitmap(mBitmap, 0, 0, null);
}