2010-10-25 13 views
6

Hallo all: Ich schreibe eine Klasse, die von TextView erben, und überschreiben ihre onDraw() Methode, aber in der Methode, mein Aufruf von canvas.drawText() nicht scheint zu funktionieren, der Code nur wie folgt:Warum funktioniert mein Aufruf von Canvas.drawText() einfach nicht

protected void onDraw(Canvas canvas) { 
    // super.onDraw(canvas); 
    Paint paint = new Paint(); 
    paint.setColor(android.graphics.Color.WHITE); 
    paint.setTextSize(20); 

    String text = "hello"; 
    canvas.drawText(text, 0, 0, paint); 
} 
+0

@bemace, Was macht es? Dies sollte Hallo in der oberen linken Ecke zeichnen. Stürzt es ab? Tut es nichts? Wird das ursprüngliche Verhalten von textView übernommen? Wie verwenden Sie die überschriebene Textansicht in einem Layout? –

+0

@Greg - Ich habe gerade die Codeformatierung aufgeräumt, user486005 fragte die Frage –

Antwort

18

Es wird nichts gezeichnet, weil die Textkoordinaten unten links sind. Da Sie versuchen, auf 0,0 zu zeichnen, wird es über dem Bildschirm zeichnen.

Versuchen Sie, die letzte Zeile Wechsel zu: wirklich

canvas.drawText(text, 0, 20, paint); 
+0

@ user486005 Beim Testen der Zeichnung ist es oft am besten zu versuchen und zu bekannten Punkt wie 100,100 zunächst zum Debuggen zeichnen, dann sorgen über die Platzierung. Du hättest erkannt, dass dein Problem darin bestand, Texte mit diesem Ansatz vom Bildschirm zu nehmen. Nur ein Gedanke. –

+3

Warum in der Welt würden die Koordinaten von unten links beginnen? Es war immer oben links! –

+0

Zumindest könnten sie diesen Unterschied in der Dokumentation erwähnen! –

-1

Ausgezeichnete Anregungen rund um, great job Jungs. Das nächste Mal wäre es aber nett, wenn Sie den Typ in einem Kommentar oder etwas fragen, ob er das völlig Offensichtliche versucht hat oder nicht, bevor er es als Antwort veröffentlicht. Glaubst du wirklich, dass er in der Sekunde, in der er zu einem Punkt kam, der nicht funktionierte, einfach direkt zu Stack Overflow kam, ohne zu experimentieren?

Ich habe einen alternativen Vorschlag, der verrückt genug auf der gesamten Frage basiert und nicht nur der Teil, der ohne viel Wissen beantwortet werden könnte.

Ich würde empfehlen, versuchen Sie Ihren DrawText-Aufruf auf einem Canvas, das nicht in einer TextView-Unterklasse ist, so dass es nicht von den mehreren hundert Zeilen Code in TextView überschrieben werden, die es zeichnenden Zustand verwalten.