2010-10-28 74 views
1

我正在制作一个应用程序,需要能够在最后一组之上绘制新图形。从旧画布绘制 - Android

这是我目前的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()方法,但它的行为非常有趣。

任何帮助表示赞赏:)

PS,它在需要时,该类扩展SurfaceView并实现SurfaceHolder.Callback

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

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

回答

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

工程完全按照预期,它创建于旧帆布不断

0

您将不得不将前一个图像持久存储到ArrayList中,并且在ondraw过程中,通过ArrayList循环来重绘所有项目。

是这样的:

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

难道不是顶部绘制的效果有没有什么方法可以创建画布的位图图像,然后在下次调用onDraw()时绘制该图像?每一帧都会画出很多线条,这种方式我认为是非常酷的处理器 – 2010-10-28 09:55:30