7
votes

Canvas.Drawtext (...) n'imprime pas la cheviche

J'ai essayé d'écrire du texte sur une vue de surface que j'ai créée. Cela fonctionne bien, si le titre est faux, et il n'y a pas de linebreaké ajouté au texte. Mais si j'ajoute un titre et donc un chevreake, le chevreake n'est pas imprimé comme prévu, mais il y a plutôt ce symbole [] imprimé.

Toute astuce Pourquoi? P>

@Override
public void drawObject() {
String text = "";
if (title) {
   text = getGameBoard().getGame().getForeignProfile().getName() + "\n";
}
text = text + getScoreAsString();
getGameBoard().getCanvas().drawText(text, 0, text.length(), getPosition().getX(), getPosition().getY(), getPaint());
}


1 commentaires

4 Réponses :


1
votes

Le symbole [] est probablement votre personnage de nouvelle ligne. Pour une raison quelconque, TreyText () ne sait pas comment gérer les nouvelles lignes.

Souchez deux fois la nouvelle ligne, ou appelez TunText () deux fois avec une position Y offset pour simuler une nouvelle ligne.


3 commentaires

Merci. Je ne savais pas que cela ne prend pas en charge la nouvelle ligne. C'est vraiment ennuyeux. Que voulez-vous dire avec la nouvelle ligne?


Utilisez string.replace () pour remplacer toutes les instances de "\ n" avec "" (une chaîne vide).


ah oui ce n'est pas le problème, le code ci-dessus est la situation unique où j'en ai besoin;) et comme vous pouvez le voir ajouter le "\ n" par moi-même



26
votes

Vous pouvez essayer quelque chose comme ce qui suit pour dessiner du texte avec des chevrons: xxx


0 commentaires

10
votes

La réponse de Dee est brillante. Le code ci-dessous est basé sur la réponse de Dee, mais avec quelques amendements de préférences personnelles:

  1. appelez-le tiredmultilinetext (comme il est en quelque sorte équivalent à ThyText Li>
  2. Mettez les paramètres dans le même ordre que Thintexte (texte, x, y, peinture et toile à la fin) li>
  3. Obtenez la hauteur de la ligne une fois au début car la hauteur renvoyée des limites dépend de la hauteur des lettres, c'est-à-dire pas aussi grande que E li>
  4. Ajouter 20% Hauteur Gap entre les lignes P>

    void drawMultilineText(String str, int x, int y, Paint paint, Canvas canvas) {
        int      lineHeight = 0;
        int      yoffset    = 0;
        String[] lines      = str.split("\n");
    
        // set height of each line (height of text + 20%)
        paint.getTextBounds("Ig", 0, 2, mBounds);
        lineHeight = (int) ((float) mBounds.height() * 1.2);
        // draw each line
        for (int i = 0; i < lines.length; ++i) {
            canvas.drawText(lines[i], x, y + yoffset, paint);
            yoffset = yoffset + lineHeight;
        }
    }
    


2 commentaires

La magie!! Thx @dee a sauvé ma journée


Brillant..saved me beaucoup de mal de tête.



4
votes

Continuer à améliorer les réponses de Dee et Frinkthebrate. J'ai ajouté un record à la méthode pour permettre de dessiner dans une zone de largeur particulière. Veillera à la modifier pour sélectionner une taille de police appropriée et vous assurer qu'il convient à la zone de hauteur correcte.

Cela vous permettra de spécifier la largeur des lignes que vous souhaitez écrire, qui est très utile pour briser une chaîne non formatée de Texte en lignes de longueur similaires et les dessiner à une toile. xxx

Cette réponse inclut cet excellent extrait de code trouvé ici dans une réponse précédente par user850688 Https://stackoverflow.com/a/11353080/1759409


4 commentaires

et l'espace de dessin serait ...?


Drawspace est une variable record que vous envoyez à la méthode afin que la méthode sait comment une grande surface est disponible pour être remplie de texte.


@Musicmonkey n'est pas la hauteur de chaque ligne exacte comme la taille de la police?


@android développeur oui c'est. Mais pour le texte à regarder naturellement espacés, notre œil travaille normalement sur l'espacement d'environ 20% au-dessus et au-dessous ... sinon chaque ligne de texte semblera toucher la ligne ci-dessus et ci-dessous. Je pourrais réécrire à nouveau cette ligne de sorte que la linePacing peut être transmise comme une constante mais j'ai constaté que 'x 1.2' m'a donné une mise en page constante et agréable.