8
votes

Texte central sur un bitmap

J'essaie de dessiner un texte sur le centre d'un bitmap, mais je ne peux pas le faire, même si j'avais utilisé Align.center. Le code est: xxx

Qu'est-ce que je fais mal?


1 commentaires

Supprimer cette peinture.SetTexttalign (Align.center); et remplacer cette canvas.Drawtext (GTTEXT, X * échelle, y * échelle, peinture); par ce canevas.Drawtext (GTexte, x, y, peinture); J'espère que cela aidera


3 Réponses :


0
votes

Où est le dessin de texte? Le problème pourrait être depuis que vous avez changé le texte s'aligner sur Align.center. Votre code calculant X et Y suppose que le rendu du texte utilise Align.Left, je crois.

Utilisez SettextStaLign (Align.center) et rendu au centre bitmap réel ou utilisez SettextStaLign (Align.Left) et utilisez les calculs X et Y actuels que vous utilisez.


0 commentaires

17
votes

C'est beaucoup plus simple que vous ne le pensez.

Dessinez le texte à la moitié de la largeur et de la hauteur bitmap s (point central) en combinaison avec peinture.SetTextaLign (align.center) . .

La propriété d'alignement prendra soin du reste.


1 commentaires

Ce seul centre du texte horizontalement, mais pas verticalement



3
votes

Je suppose que rien des réponses données ci-dessus ne suffisent donc donc je posterai ma réponse. Essayez les gars, cela fonctionnera sur tous les appareils et ne sera pas complexe du tout:

    String text = "Text"; //your string
    Canvas canvas = new Canvas(bitmap);

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(activity.getResources().getColor(R.color.white));
    paint.setTextSize(30);

    // draw text to the Canvas center
    Rect boundsText = new Rect();
    paint.getTextBounds(text, 0, text.length(), boundsText);
    int x = (bitmap.getWidth() - boundsText.width()) / 2;
    int y = (bitmap.getHeight() + boundsText.height()) / 2;

    canvas.drawText(text, x, y, paint);


2 commentaires

C'est presque correct, mais cela ne fonctionnera pas pour "I", "1", ".", ... - Celles-ci seront plus à gauche et échoueront de manière misérablement sur "-" (sera légèrement à gauche et chemin au-dessus du milieu). Essayez d'utiliser Canvas.Drawtext (Texte, X - Loutis.Left, Y - Bounds.bottom, Peinture); Ensuite, le texte sera vraiment au milieu.


Le passage de X et Y dans la méthode Trausext est la meilleure approche. Merci!