2011-09-13 4 views
0

J'ai un problème avec mon code. Lorsque je tente de faire tourner le tout texte fonctionne, mais je veux restaurer si la toile je donne la parole canvas.restore();jeu développant sur android: rotation de texte dans une toile

Quand je fais que mon application va fermer immédiatement ...

une partie de mon code:

toucher une partie de l'écran:

if (wahrheitswert1 == true) { 
    x = 480; 
    y = 100;  

    // draw bounding rect before rotating text 
    Rect rect = new Rect(); 
    canvas.translate(x, y); 

    // undo the translate 
    canvas.translate(-x, -y); 
    // rotate the canvas on center of the text to draw 
    canvas.rotate(-180, x + rect.exactCenterX(), y + rect.exactCenterY()); 
    // draw the rotated text 
    canvas.drawText("Spieler1 touch", x, y, paint); 
    //undo the rotate 
    //canvas.restore(); 
    wahrheitswert1 = false; 
    canvas.restore(); 
} 

Si je ne rétablissent pas le bitmap j'ai l'image d'arrière-plan sera copié à partir de l'autre site de l'écran. merci pour votre aide

Répondre

1

Bien que je n'ai pas utilisé beaucoup de toile, je ne vois pas où vous enregistrez le contexte avant de le restaurer. Je suis assez sûr de faire une restauration sur le contexte que vous devez d'abord sauvegarder le contexte.

+0

vrai, sans enregistrer il n'y a rien à restaurer ... – WarrenFaith

+0

pourriez-vous s'il vous plaît dites-moi ce que j'ai à faire? je suis nouveau dans la programmation d'un expert pas un Java – kmartinho

+0

jeter un oeil à http://developer.android.com/reference/android/graphics/Canvas.html notez que la méthode de restauration mentionne que vous avez déjà eu une sauvegarde (). Fondamentalement, au moment où vous voulez restaurer, mettez canvas.save() ainsi quand la restauration est appelée, elle restaure le point sauvegardé. – Contristo

0

Vous devez appeler

Canvas.save() 

avant de faire tourner la toile. Vous pouvez restaurer le canevas à tout moment en appelant Canvas.save(). J'ai modifié votre code ci-dessous.

if (wahrheitswert1 == true) { 
    x = 480; 
    y = 100; 

    canvas.save(); 

    // draw bounding rect before rotating text 
    Rect rect = new Rect(); 
    canvas.translate(x, y); 

    // undo the translate 
    canvas.translate(-x, -y); 
    // rotate the canvas on center of the text to draw 
    canvas.rotate(-180, x + rect.exactCenterX(), y + rect.exactCenterY()); 
    // draw the rotated text 
    canvas.drawText("Spieler1 touch", x, y, paint); 
    //undo the rotate 
    //canvas.restore(); 
    wahrheitswert1 = false; 
    canvas.restore(); 
} 

J'ai également eu le même problème et cela a fonctionné pour moi.