2012-12-20 7 views
10

Quando si utilizza il metodo Canvas e drawText(), viene visualizzato un rendering diverso su Android 4.2.1.Android 4.2.1 crenatura carattere errata (spaziatura)

Sotto 4.2:

enter image description here

Per Android 4.2.1 (Nexux 7) ottengo:

enter image description here

Come si può vedere il testo consumo è molto stretto. Sembra essere un problema di crenatura introdotto in 4.2.1. La vernice utilizzata per disegnare il testo è niente di speciale:

titlePaint = new Paint(); 
titlePaint.setAntiAlias(true); 
titlePaint.setColor(0xffffffff); 
titlePaint.setTextSize(0.125f); 
titlePaint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); 
titlePaint.setTextAlign(Align.CENTER); 
titlePaint.setLinearText(true); 

Se io non uso titlePaint.setLinearText(true) ho un risultato strano 4.2.1 come potete vedere c'è:

Android 4.2 on Nexus 7: canvas.drawText() not working correctly

EDIT :

Questo strano comportamento è stato segnalato al team di Android: http://code.google.com/p/android/issues/detail?id=39755 ma non è ancora un problema "ufficiale".

EDIT (2):

Alcune voci sostengono che il problema è un textSize < 1.0f ...

+0

Qual è esattamente la tua domanda? – THelper

+0

Perché i testi vengono visualizzati su Android 4.2.1 in questo modo? Cosa posso fare per correggere questo comportamento indesiderato? –

risposta

13

soluzione alternativa, che sono attualmente in uso:

scalePaint.setTextSize(1.5f); 

poi, nel metodo OnDraw:

canvas.save(); 
canvas.scale(0.01f, 0.01f); 
canvas.drawText(""+i, 0.5f*100, 0.8f*100, scalePaint);     
canvas.restore(); 

Come potete vedere, sto ridimensionamento di nuovo la posizione del testo, quindi è dove dovrebbe essere.

+0

Io voto per il tuo risposta perché sei il primo a suggerire una soluzione alternativa a questo incredibile problema. Grazie (e vota per la domanda, forse qualcun altro lo vedrà e ci aiuterà!). –

+2

Ad essere onesti, non sono il primo, l'ho trovato da qualche altra parte, pubblico il link il prima possibile. Poiché si tratta di un bug per Android, non sono sicuro che ci sarà una vera soluzione al problema invece di soluzioni sciocche. – scana

+0

Sto ancora aspettando una risposta da Google come puoi vedere qui: http://gc.codehum.com/p/android/issues/detail?id=39755. Penso che tu sia il primo qui su StackOverflow. Se non è vero per favore dai il link dove hai trovato quella soluzione! :) E sì, sei onesto! –

0

Questo è un bug in Android e mentre è già sottoposto al bug tracker che si potrebbe desiderare di +1 lì per ottenere una certa attenzione: Issue 39755

+0

Sì, attualmente sto partecipando alla segnalazione. Sono stato contattato dal team di Android, ma non è ancora stato contrassegnato come problema "reale". Stanno ancora indagando ... Grazie per aver segnalato il link corretto alla pagina di Google. Hai lo stesso problema? –

+0

Questa è la mia altra domanda: http://stackoverflow.com/questions/13941270/android-4-2-on-nexus-7-canvas-drawtext-not-working-correctly/13971632#13971632 –

9

Ho risposto alla mia domanda dopo aver accettato l'unica risposta che ha proposto una soluzione alternativa per il mio problema specifico. Potrebbe essere una soluzione "bella" e "definitiva":

public static void drawTextOnCanvasWithMagnifier(Canvas canvas, String text, float x, float y, Paint paint) { 
     if (android.os.Build.VERSION.SDK_INT <= 15) { 
      //draw normally 
      canvas.drawText(text, x, y, paint); 
     } 
     else { 
      //workaround 
      float originalTextSize = paint.getTextSize(); 
      final float magnifier = 1000f; 
      canvas.save(); 
      canvas.scale(1f/magnifier, 1f/magnifier); 
      paint.setTextSize(originalTextSize * magnifier); 
      canvas.drawText(text, x * magnifier, y * magnifier, paint); 
      canvas.restore(); 
      paint.setTextSize(originalTextSize); 
     } 
    } 
+0

Mi piace molto la tua risposta e non ho potuto fare a meno di sostituire 1000 per 1024 per la lente d'ingrandimento (sperando che sia più ottimizzata da qualche parte in fondo ...) – Couitchy

Problemi correlati