Android:在新画布上绘图

时间:2013-07-26 08:26:33

标签: android android-canvas surfaceview

我通过扩展View来创建自定义视图。

    public class CustomView extends View {
        private Canvas canvas2;
        private Bitmap backingBitmap;

在CustomView的构造函数中,我有以下代码:

backingBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
canvas2 = new Canvas(backingBitmap);

在onDraw中,我有:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawCircle(100, 100, 50, paint);
    canvas2.drawCircle(0, 0, 10, paint);
}

我可以看到使用“canvas”对象绘制的圆,但不是使用“canvas2”对象绘制的圆。 我的理解是,只需要创建一个可变的Bitmap并使其成为Canvas的支持位图。有人能指出这里有什么问题吗?

奖金问题:在屏幕上创建自定义画布对象的位置,以及如何设置其位置?

创建多个画布的原因:我有一个包含整个屏幕的SurfaceView。所以,它的画布基本上覆盖整个屏幕。我需要在屏幕内制作一个类似窗口的矩形,并且需要在该窗口的范围内制作动画。基本上,如果您在此窗口中翻译图像,则不应在窗口边界外绘制图像。

干杯!

1 个答案:

答案 0 :(得分:7)

我弄清楚我的理解有什么问题。这一切看起来都很简单!这link有所帮助。

基本上,当我们创建一个Canvas对象时,它会创建一个屏幕画布来保存我们的绘图调用。这个Canvas对象需要由一个可变的Bitmap支持,这样所有的绘图最终都会存储在这个Bitmap上。绘图完成后,您可以使用绑定到曲面的画布(在onDraw中获得的画布)绘制可变位图。

在我的代码中,我进行了以下更改以使其正常工作。

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawCircle(100, 100, 50, paint);
    canvas2.drawCircle(25, 25, 25, paint);
    canvas.drawBitmap(backingBitmap, 200, 90, paint);
}