从旧画布中绘制 - Android

时间:2010-10-28 01:26:54

标签: java android android-canvas ondraw

我正在制作一款需要能够在最后一组上绘制新图形的应用程序。

这是我当前的onDraw()方法 -

protected void onDraw(Canvas canvas) {

    canvas.drawColor(Color.WHITE);

    if(points.size() > 0) {
        //do some stuff here - this is all working ok
        canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
    }   
}

基本上,我需要将新图形作为最后一层的图层绘制,所以我正在寻找的是将最后一个画布的图像传送到当前的方式。

我试图使用canvas.setBitmap()方法自己解决这个问题,但它非常有趣。

任何帮助表示赞赏:)

P.S如果需要,该类扩展SurfaceView并实现SurfaceHolder.Callback

编辑:这是我在onDraw()方法中尝试过的,但它只是强行关闭

if(bitmap != null) {
        canvas.drawBitmap(bitmap, 0, 0, paint);
        canvas.setBitmap(bitmap);  
    }

2 个答案:

答案 0 :(得分:4)

自己找到答案:)

@Override
protected void onDraw(Canvas c) {

if(bitmap != null && canvas != null) { 
    canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
    c.drawBitmap(bitmap, 0, 0, linePaint);  
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
}

完全按照预期工作,它会在旧画布上不断创建绘图效果

答案 1 :(得分:0)

您必须将前一个图像持久存储到ArrayList中,并且在ondraw期间,循环遍历ArrayList以重绘所有项目。

类似的东西:

for (Graphic graphic : _graphics) {
    bitmap = graphic.getBitmap();
    coords = graphic.getCoordinates();
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}