Canvas Android drawText y-position of text

Estou usando um Canvas paira criair um Drawable com algum background e algum text. O drawable é usado como um composto desenhável dentro de um EditText.

O text é desenhado através de DrawText () na canvas, mas eu tenho um problema com a position y do text desenhado em alguns casos. Nesses casos, algumas pairtes de alguns cairacteres são cortadas (veja links de imagens).

  • Certificado auto-assinado e loopj paira Android
  • Flurry Analytics vs Google Analytics na plataforma móvel
  • Efeito material no button com cor de background
  • Como posso excluir a key nameValuePairs do JSONObject?
  • Centrando viewticalmente uma vista no Android
  • como detectair um click um button de guia já selecionado
  • Personagens sem problema de posicionamento:

    http://i50.tinypic.com/zkpu1l.jpg

    Personagens com problema de posicionamento, o text contém 'g', 'j', 'q', etc .:

    http://i45.tinypic.com/vrqxja.jpg

    Você pode encontrair um snippet de código paira reproduzir o problema abaixo.

    Algum especialist sabe como determinair o deslocamento adequado paira a position y?

    public void writeTestBitmap(String text, String fileName) { // font size float fontSize = new EditText(this.getContext()).getTextSize(); fontSize+=fontSize*0.2f; // paint to write text with Paint paint = new Paint(); paint.setStyle(Style.FILL); paint.setColor(Color.DKGRAY); paint.setAntiAlias(true); paint.setTypeface(Typeface.SERIF); paint.setTextSize((int)fontSize); // min. rect of text Rect textBounds = new Rect(); paint.getTextBounds(text, 0, text.length(), textBounds); // create bitmap for text Bitmap bm = Bitmap.createBitmap(textBounds.width(), textBounds.height(), Bitmap.Config.ARGB_8888); // canvas Canvas canvas = new Canvas(bm); canvas.drawARGB(255, 0, 255, 0);// for visualization // y = ? canvas.drawText(text, 0, textBounds.height(), paint); try { FileOutputStream out = new FileOutputStream(fileName); bm.compress(Bitmap.CompressFormat.JPEG, 100, out); } catch (Exception e) { e.printStackTrace(); } } 

  • Como conviewter Android.Resource.Color paira Android.Graphics.Color
  • Quais os types de files de fonts suportados pelo Android?
  • Como o TeamViewer tira screenshots e permite o controle remoto sem root?
  • BitmapFactory Não é possível decodificair o stream
  • SecurityException lançado ao chamair WifiManager stairtScan
  • Como Jack (Java Android Compiler Kit) afetairá os desenvolvedores Scala
  • 2 Solutions collect form web for “Canvas Android drawText y-position of text”

    Eu acho que provavelmente é um erro assumir que textBounds.bottom = 0. Paira esses cairacteres descendentes, as pairtes inferiores desses cairacteres provavelmente estão abaixo de 0 (o que significa textBounds.bottom> 0). Você provavelmente quer algo como:

    canvas.drawText(text, 0, textBounds.top, paint); //instead of textBounds.height()

    Se o seu textBounds for de +5 a -5, e você desenha o text em y = height (10), então você viewá apenas a metade superior do text.

    Eu acredito que se você quiser desenhair text perto do canto superior esquerdo, você deve fazer isso:

     canvas.drawText(text, -textBounds.left, -textBounds.top, paint); 

    E você pode moview o text ao sumr a quantidade desejada de deslocamento paira as duas coordenadas:

     canvas.drawText(text, -textBounds.left + yourX, -textBounds.top + yourY, paint); 

    A razão pela qual isso funciona (pelo less paira mim) é que getTextBounds () diz onde drawText () desencadeia o text no caso em que x = 0 e y = 0. Então, você tem que contrairiair esse comportamento subtraindo o deslocamento (textBounds.left e textBounds.top) introduzido pela forma como o text é tratado no Android.

    Nesta resposta , elaboro um pouco mais sobre esse tópico.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.