2013-02-28 14 views
6

Bei dieser Methode Dokumentation ist es geschrieben, dass:Wie Canvas.DrawText() wirklich den Text zeichnet?

x The x-coordinate of origin for where to draw the text 
y The y-coordinate of origin for where to draw the text 

Aber es ist nicht über die Richtung, sagt etwas dieser Text gezogen wird. Ich weiß, dass der Text von dem Ursprung nach oben gezogen wird, aber wenn ich die folgenden Argumente geben, wird mein Text schneiden:

canvas.drawText(displayText, 0, canvas.getHeight(), textPaint); 

zusätzlich, nehme ich bin mit Align.LEFT (was bedeutet, dass der Text gezeichnet rechts neben dem x, y Ursprung)

Also was sind die richtigen Argumente sollten (vorausgesetzt, ich möchte keine festen Zahlen verwenden)?

+0

vielleicht ist das, was Sie suchen (überprüfen Sie den Kommentar auf die Antwort). http://stackoverflow.com/questions/10606410/android-canvas-drawtext-y-position-of-text –

+0

Wie wird der Text geschnitten? Wird überhaupt ein Text angezeigt? – Barney

+0

Wenn Sie versuchen, den Wert y auf canvas.getHeight()/2 zu setzen, wird der Text in der Mitte korrekt angezeigt? Außerdem sollten Sie sagen, was Sie konkreter erreichen möchten. – Barney

Antwort

2

Dies ist, was ich schließlich verwendet:

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    if (textAlignment == Align.CENTER) { 
     canvas.drawText(displayText, canvas.getWidth()/2, canvas.getHeight()-TEXT_PADDING, textPaint); 
    } 
    else if (textAlignment == Align.RIGHT) { 
     canvas.drawText(displayText, canvas.getWidth()-TEXT_PADDING, canvas.getHeight()-TEXT_PADDING, textPaint); 
    } 
    else if (textAlignment == Align.LEFT) { 
     canvas.drawText(displayText, TEXT_PADDING, canvas.getHeight()-TEXT_PADDING, textPaint); 
    } 
    //canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), p); 
} 

Zwei Anmerkungen:

  1. TEXT_PADDING ist eine dp I-Dimension zu Pixel zur Laufzeit (in meinem Fall 3DD) konvertieren.
  2. Sie können die letzte Zeile rückgängig machen, um das Rect zum Debuggen um Ihre Arbeitsfläche zu zeichnen.
2

Vielleicht können Sie das folgende Snippet verwenden, wenn seine Arbeiten zu sehen oder nicht:

int width = this.getMeasuredWidth()/2; 
int height = this.getMeasuredHeight()/2; 
textPaint.setTextAlign(Align.LEFT); 
canvas.drawText(displayText, width, height, textPaint); 

Die Breite und Höhe sind in meinem Fall nur willkürlich berechnet.

+0

Es wird geschnitten, siehe meinen Kommentar .. –

Verwandte Themen