Mettre en place un rectangle autour d'une chaîne sur une toile Android
-
26-10-2019 - |
Question
Utilisation Je Canvas.drawText pour dessiner une chaîne de caractères sur une Canvas . Le problème est que je veux dessiner un rectangle avant afin que les apparaisse texte centré sur le rectangle. Mais je frappe un vrai problème. Le fourni x et y coordonnées drawText fait ne sont pas de " en haut à gauche " coin du texte réel , mais plutôt sur la ligne où les personnages commencent. Il existe une méthode Paint.getTextBounds qui retourne un rectangle "avec l'origine implicite" à (0,0) du texte qui serait tiré. Le problème est que l'origine est à (0,0) . La largeur et la hauteur de cette boîte sont corrects, mais je ne sais pas comment placer son coin supérieur gauche au coin en haut à gauche de la chaîne qui est dessiné sur la toile. Je suppose que je devrais utiliser FontMetrics , mais étant donné que beaucoup des valeurs FontMetrics renvoie Je ne suis pas sûr de savoir comment les utiliser sont en situation irrégulière pour mon but.
La solution
J'ai fini par faire
FontMetrics fm = new FontMetrics();
paint.setTextAlign(Paint.Align.CENTER);
paint.getFontMetrics(fm);
canvas.drawText(text, x, y + -(fm.ascent + fm.descent) / 2, paint);
Ce qui tire en fait le texte centré sur x , y . Avant que je dessine un rectangle centrée à x , y avec une largeur paint.measureText ( text )
Autres conseils
essayez de dessiner en utilisant
canvas.drawRect(x, y - Paint.GetTextSize(), x + Paint.measureText("text"), y, Paint);