2010-10-25 33 views
6

Salut à tous: J'écris une classe qui hérite de TextView, et remplace sa méthode onDraw(), mais dans la méthode, mon appel de canvas.drawText() ne semble fonctionner, le code juste comme ci-dessous:pourquoi mon invocation de Canvas.drawText() ne fonctionne tout simplement pas

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, Que fait-il? Cela devrait dessiner bonjour dans le coin supérieur gauche. Est-ce que ça plante? Ne fait-il rien? Est-ce que le comportement original de textView prend le dessus? Comment utilisez-vous le TextView écrasé dans une mise en page? –

+0

@Greg - Je viens de nettoyer la mise en forme du code, user486005 a posé la question –

Répondre

18

Il ne dessine rien parce que les coordonnées de texte sont en bas à gauche. Puisque vous essayez de dessiner sur 0,0, il va dessiner au-dessus de l'écran.

Essayez de changer la dernière ligne à:

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

@ user486005 Lors du test de dessin est souvent préférable d'essayer et de dessiner à un point connu comme 100 100 initialement pour le débogage puis s'inquiéter de placement. Vous auriez réalisé que votre problème était que le texte sortait de l'écran en adoptant cette approche. Juste une pensée. –

+3

Pourquoi dans le monde les coordonnées commenceraient-elles en bas à gauche? Il a toujours été en haut à gauche! –

+0

Au moins ils pourraient mentionner cette différence dans la documentation! –

-1

excellentes suggestions tout autour, grands gars de travail vraiment. La prochaine fois que ce serait bien si vous demandez au gars dans un commentaire ou quelque chose s'il a essayé le complètement évident avant de l'afficher comme une réponse. Pensez-vous vraiment qu'à la seconde où il est arrivé à un point qui ne fonctionnait pas, il est juste venu directement à Stack Overflow sans expérimenter?

J'ai une suggestion alternative, qui est assez folle est basée sur la question entière et pas seulement la partie qui pourrait être répondu sans beaucoup de connaissances réelles.

Je vous recommande d'essayer votre appel drawText sur un canevas qui n'est pas dans une sous-classe TextView. Ainsi, les centaines de lignes de code dans TextView qui gèrent l'état drawable ne le surchargeront pas.