161 votes

Mesurer la hauteur du texte à dessiner sur Canvas (Android)

Tout droit vers l'avant de façon à mesurer la hauteur de texte? La façon dont je suis en train de faire maintenant, c'est avec de la Peinture de savoir measuretext() pour obtenir la largeur, puis par l'essai et l'erreur de trouver une valeur pour obtenir une hauteur approximative. J'ai aussi été déconner avec FontMetrics, mais tous ceux-ci semblent comme méthodes approximatives qui sucent.

Je suis en train de l'échelle des choses pour différentes résolutions. Je peux le faire, mais je me retrouve avec incroyablement détaillé code avec beaucoup de calculs pour déterminer la taille relative. Je le déteste! Il y a une meilleure façon.

De toute façon, une chose à la fois: Merci.

146voto

bramp Points 3769

Qu'en est-il de Paint.getTextBounds ()

91voto

Nar Gar Points 990

@bramp réponse est bonne, en partie, en ce qu'elle ne mentionne pas que le calcul des limites sera le minimum rectangle qui contient le texte entièrement avec les coordonnées de démarrage 0, 0.

Cela signifie, que la hauteur de, par exemple "Py" sera différente de la hauteur de "py" ou "salut" ou "oi" ou "aw" parce que pixel-sage, ils exigent des hauteurs différentes.

Cela ne signifie est équivalente à FontMetrics classique de java.

Alors que la largeur d'un texte n'est pas vraiment une douleur, la hauteur est de.

En particulier, si vous avez besoin de la verticale du centre-aligner le texte établi, essayez de trouver les limites du texte "a" (sans les guillemets), au lieu d'utiliser le texte que vous avez l'intention de tirer. Fonctionne pour moi...

Voici ce que je veux dire:

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG);

paint.setStyle(Paint.Style.FILL);
paint.setColor(color);
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(textSize);

Rect bounds = new Rect();
paint.getTextBounds("a", 0, 1, bounds);

buffer.drawText(this.myText, canvasWidht >> 1, (canvasHeight + bounds.height()) >> 1, paint);
// remember x >> 1 is equivalent to x / 2, but works much much faster

Bonne chance!

17voto

kimnod Points 3

La hauteur correspond à la taille du texte que vous avez définie dans la variable Paint.

Une autre façon de connaître la hauteur est

 mPaint.getTextSize();
 

2voto

moondroid Points 398

Vous pouvez simplement obtenir la taille du texte d'un objet Paint à l'aide de la méthode getTextSize (). Par exemple:

 Paint mTextPaint = new Paint (Paint.ANTI_ALIAS_FLAG);
//use densityMultiplier to take into account different pixel densities
final float densityMultiplier = getContext().getResources()
            .getDisplayMetrics().density;  
mTextPaint.setTextSize(24.0f*densityMultiplier);

//...

float size = mTextPaint.getTextSize();
 

1voto

Putti Points 11

Vous devez utiliser Rect.width() et Rect.Height() qui sont revenus de getTextBounds() place. Ça marche pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X