2010-10-28 7 views
1

Je fais une application qui doit être capable de dessiner de nouveaux graphiques sur le dernier ensemble.Dessiner à partir de vieux canevas - Android

Ceci est ma méthode onDraw() en cours -

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

Fondamentalement, je dois dessiner les nouveaux graphiques en tant que couche au-dessus de la dernière, donc ce que je suis à la recherche est un moyen de réaliser l'image de la dernière toile au courant.

J'ai essayé de comprendre moi-même en utilisant la méthode canvas.setBitmap() mais il agit très drôle.

Toute aide appréciée :)

PS si elle est nécessaire, la classe étend SurfaceView et met en œuvre SurfaceHolder.Callback

Edit: Voici ce que j'ai essayé dans la méthode onDraw() mais juste la force ferme

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

Répondre

4

trouvé la réponse moi-même :)

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

fonctionne exactement comme prévu, il crée l'effet de dessin au-dessus de la vieille toile en continu

0

Vous devrez stocker l'image précédente de manière persistante sur une ArrayList, et pendant le retrait, faites une boucle dans ArrayList pour redessiner tous les éléments.

quelque chose comme ceci:

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

Isn Y at-il une façon que je peux créer une image bitmap de la toile, puis dessiner juste que la prochaine fois onDraw() est appelé? Il y aura beaucoup de lignes dessinées à chaque image et de cette façon, je pense que c'est très processeur –

Questions connexes