2010-06-07 6 views
1

je rencontre ce problème lors de l'affichage du texte sur SurfaceView, certains caractères peuvent grimper sur d'autres, le code est ici:problème Affichage Android Canvas.drawString

private static void fakeDraw(Canvas c) 
{ 
    Paint mPaint = new Paint(); 
    int color = 0xff000000; 
    mPaint.setColor(color); 
    mPaint.setStrokeWidth(2); 
    mPaint.setStyle(Style.FILL); 
    mPaint.setAntiAlias(true); 

    FontMetricsInt fm = mPaint.getFontMetricsInt(); 
    int fh = Math.abs(fm.top); 
    int left = 0; 
    int top = 100; 
    Rect smallClip = new Rect(left, top-fh, left + 200, top + 30); 
    Rect bigClip = new Rect(0, 0, getW(), getH()); 
    c.drawRect(bigClip, mPaint); 
    String text1 = "Evi"; 
    String text2 = ">>"; 
    String text3 = "Tom"; 

    color = 0xff303030; 
    mPaint.setColor(color); 
    c.drawRect(smallClip, mPaint); 

    color = 0xffffffff; 
    mPaint.setColor(color); 
    c.drawText(text1, left, top, mPaint); 

    Rect bounds = new Rect(); 
    mPaint.getTextBounds(text1, 0, text1.length(), bounds); 

    left += bounds.width(); 
    c.drawText(text2, left, top, mPaint); 

    left -= bounds.width(); 
    top += 12; 
    c.drawText(text3, left, top, mPaint); 
    mPaint.getTextBounds(text3, 0, text3.length(), bounds); 
    left += bounds.width(); 
    c.drawText(text2, left, top, mPaint); 
    } 

Dans le cas d'un deuxième texte Tom >> tous affichés correctement, mais le premier texte Evi >> pas. Le problème est que les chars >> dessine dans Evi dessine l'espace (dernier caractère "i") !! Il est possible de voir si vous zoomez sur l'image, qu'est-ce que je fais de mal et comment y remédier?

capture d'écran peut être trouvé ici: http://img192.imageshack.us/img192/2782/imagexs.png

+1

Cela ressemble à un comportement de anticrénelage normal. Comment ça se passe avec antialias éteint? – RoToRa

+0

RoToRa, avec antialias éteint, il fonctionne greate :) merci! Existe-t-il une variante pour dessiner un texte anti-aliasé sans cliqueter les caractères? – Arkaha

+0

Je ne vois pas vraiment le problème, pourriez-vous expliquer un peu plus comment vous vous attendiez à ce que le code se comporte et ce qui vous semble mauvais? – ee3509

Répondre

0

Hm, essayez de spécifier co-ords particulier x/y? avec des nombres plutôt que des chaînes pré-définies? donnez au ">>" différentes coordonnées pour son espace de dessin.

+0

dans ce cas, les premiers pixels de >> tirent à gauche des coords x réels. – Arkaha

0

Il suffit d'ajouter un peu d'espace manuellement

c.drawText(text2, left + 2, top, mPaint); 

ou ajouter un caractère d'espace (» «) au début de texte2