Domanda

Sto cercando di disegnare il testo arabo su una bitmap per la visualizzazione:

Bitmap img = Bitmap.createBitmap( (int) f+100, 300, Config.RGB_565);
Canvas c = new Canvas();
c.setBitmap(  img );
mFace = Typeface.createFromAsset(getAssets(),"DejaVuSansCondensed.ttf");
mPaint.setTypeface(mFace);
content = "يجري";
content = ArabicUtilities.reshape( content );
System.out.println("Drawing text: " + content);
c.drawText(content, 30, 30, mPaint);

La classe ArabicUtilities è uno strumento per rimodellare il testo unicode in modo che le lettere siano collegate. vedi: http://github.com/agawish/Better-Arabic-Reshaper/

Tuttavia, la bitmap generata è simile alla seguente:

alt text http://imagebin.ca/img/J1EB8DWc.jpg

Quando dovrebbe apparire come يجري

Credo che il problema sia perché, diversamente da un TextView , la classe Bitmap non è a conoscenza di BiDi, quindi disegna le lettere da sinistra per scrivere.

Prova come potrei, non riesco a capire come disegnare il testo nell'ordine corretto.

È stato utile?

Soluzione

Canvas è praticamente un involucro attorno a Canvas of Skia (motore grafico nativo). Skia non esegue alcun BiDi / rimodellamento, disegna semplicemente sequenze di glifi.

TextView, d'altra parte, utilizza un carico di oggetti relativi al testo di Android, tra cui layout e classi derivate che fanno un BiDi semplice (in realtà stupido). Il BiDi di Android è molto stupido e non riesce nemmeno a gestire le cifre in RTL: '& # 1591; & # 1608; & # 1604; & # 1610; Viene visualizzato 180 '' & # 1591; & # 1608; & # 1604; & # 1610; 081' .

Personalmente non mi fido dell'attuale BiDi di Android e scrivo la mia classe conforme Unicode-BiDi e la uso se ne ho bisogno. Ti suggerisco di usare il BiDi manuale oltre al fratello rimodellante manuale. Ricorda: prima BiDi, quindi rimodella!

Salam

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top