Comment dessiner un texte RTL (arabe) sur un Bitmap et le commander correctement?

j'essaie de dessiner du texte arabe sur une image pour affichage:

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 est un outil pour remodeler le texte unicode afin que les lettres soient connectées. voir: http://github.com/agawish/Better-Arabic-Reshaper /

cependant, le bitmap qui est généré ressemble à ceci:

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

Quand il devrait ressembler à يجري

je crois que le problème est parce que, contrairement à un TextView , la classe Bitmap n'est pas BiDi conscient, donc il dessine les lettres de gauche à écrire.

Essayez comme je pourrais, je ne peux pas comprendre comment dessiner le texte dans le bon ordre.

3
demandé sur j0k 2009-09-13 15:18:47

1 réponses

toile est pratiquement un enveloppement autour de la toile de Skia (moteur graphique natif). Skia n'effectue pas de BiDi/reshaping, il dessine simplement des séquences de glyphes.

TextView, sur l'autre voie, utilise une charge de Android relatives au texte des objets, parmi eux, de Mise en page et les classes dérivées qui n'simple (en fait muet) BiDi. BiDi d'Android est très stupide qu'il ne peut même pas gérer les chiffres dans RTL:'.

Personnellement Je ne faites pas confiance à L'actuel BiDi D'Android, et écrirait ma propre classe compatible Unicode-BiDi et de l'utiliser si j'ai besoin. Je te suggère d'utiliser le manuel BiDi en plus du manuel reshaping bro. Rappelez - vous: D'abord BiDi, puis remodeler!

Salam

5
répondu Tareq Sha 2010-03-05 17:07:03