2010-06-07 3 views
1

Я столкнулся с этой проблемой при отображении текста на SurfaceView, некоторые символы могут подняться на других, код здесь: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); 
    } 

В случае второго текста Tom >> все отображается правильно, но первый текст Evi >> нет. Проблема в том, что символы >> рисуют в пространстве пробега Эви (последний символ «i») !! Можно ли увеличить изображение, что я делаю неправильно и как это исправить?

снимок экрана можно найти здесь: http://img192.imageshack.us/img192/2782/imagexs.png

+1

Это выглядит как нормальное поведение антиалайзингового. Как он выглядит с отключенными антиалиасами? – RoToRa

+0

RoToRa, с антиалиасами выключен, он работает greate :) спасибо! Есть ли какой-либо вариант для рисования сглаженного текста без кликов? – Arkaha

+0

Я действительно не вижу проблемы, не могли бы вы объяснить немного больше, как вы ожидали, что код будет вести себя и что выглядит не так? – ee3509

ответ

0

Hm, Попробуйте указать конкретные х/у со-ords? с числами, а не с заранее определенными строками? дайте «>>» разные координаты для места для рисования.

+0

В этом случае первые пиксели >> рисуются слева от реальных х коордов. – Arkaha

0

просто добавить некоторое пространство вручную

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

или добавить космический символ (»«) в начале TEXT2

Смежные вопросы