Android: Messen Sie die Texthöhe auf einer Leinwand

Ich bin momentan am Rendern, ist eine Bitmap, die ich dann senden möchten, um einen mobilen Drucker. Jedoch bin ich zu kämpfen mit der Messung der Höhe meines Textes, so kann ich vorher die y-position entsprechend.

Meine basic bitmap/canvas/Farbe Konfiguration ist das (Schriftgröße 16 und die Abmessungen der bitmap werden 200x400 (Breite x Höhe):

public MyRenderer() {
    //Initialize bitmap
    bitmap = Bitmap.createBitmap(200, 400, Bitmap.Config.ARGB_8888);

    //Initialize canvas
    canvas = new Canvas(bitmap);

    //Initialize brush (Paint instance)
    brush = new Paint();
    brush.setTextSize(16);
    brush.setTypeface(Typeface.SANS_SERIF);
    brush.setColor(Color.BLACK);
    brush.setStyle(Paint.Style.FILL);
    brush.setAntiAlias(true);
    brush.setTextAlign(Align.LEFT);
}

So weit So gut, jetzt, was ich tun möchte ist: Wenn ich die Paint-Methode drawText ich brauche zur Versorgung der x-und y-Koordinaten. Für x ist null (vorausgesetzt, linksbündiger text), sondern als für y, würde ich berechnen Sie die Höhe jeder text, den ich ausdrucken und fügen Sie es, so kann ich behalten Sie den überblick über meinen aktuellen y-position.

Und jetzt wird es seltsam: ich benutze die folgende Methode, um zu bestimmen, die Höhe eines Textes (mit der Farbe einwenden, dass ich zuvor initialisiert - es nennt sich "Pinsel"):

public int measureHeight(String text) {
    Rect result = new Rect();
    //Measure the text rectangle to get the height
    brush.getTextBounds(text, 0, text.length(), result);
    return result.height();
}

Obige Methode liefert folgende Werte für die folgenden Texte:

  1. "Hallo Welt" gibt eine Höhe von 12
  2. "Einer camera-Instanz kann verwendet werden, um zu berechnen, 3D-Transformationen und generieren Sie eine matrix." gibt eine Höhe von 16
  3. "Die Einführung von Android-Design: Der Ort, an dem lernen über Prinzipien, Bausteine und Muster für die Erstellung von Welt-Klasse Android user interfaces. Egal, ob Sie ein UI-Experte oder ein Entwickler, der diese Rolle zu spielen, diese docs zeigen Ihnen, wie man gute design-Entscheidungen, große und kleine." gibt eine Höhe von 16

Macht es Sinn für mich, dass die Nummer 2 und 3 die Rückkehr einer größeren Höhe als Nummer 1, aber wenn eine Zeile hat eine Höhe von 12 (als Nummer eins hat) - es macht keinen Sinn, die mehrere Zeilen haben eine Höhe von 16 ?

Bin ich hier etwas fehlt? Es ist eine bequeme Methode für die Messung der Breite eines Textes (mithilfe einer Instanz von paint und rufen measureText("myText"), die einwandfrei funktioniert, jedoch bin ich ziemlich ratlos, wenn es um die Höhe, wie die oben aufgeführten Ergebnisse nicht machen keinen Sinn für mich.

BEARBEITEN

Ich bin mir bewusst, dass getTextBounds wahrscheinlich nicht auto-Umbruch der mehrzeiligen text, und das ist ok, ich schrieb schon eine Methode für die Aufteilung von text, aber auch wenn es nur Maßnahmen, die eine Zeile, die oben gegebene Länge Werte noch unwahrscheinlich erscheinen.

InformationsquelleAutor AgentKnopf | 2012-02-20
Schreibe einen Kommentar