Frage

Ich versuche, arabischen Text auf eine Bitmap zur Anzeige zu ziehen:

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);

Die ArabicUtilities Klasse ist ein Werkzeug, um den Unicode-Text neu zu gestalten, so werden die Buchstaben verbunden. siehe: http://github.com/agawish/Better-Arabic-Reshaper/

Allerdings ist die Bitmap, die wie folgt aussieht erzeugt wird:

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

Wenn es soll wie folgt aussehen يجري

Ich glaube, das Problem liegt daran, dass, im Gegensatz zu einem Textview , die Bitmap-Klasse ist nicht BiDi bewusst, so zieht die Buchstaben von links zu schreiben.

Versuchen Sie, wie ich könnte, ich kann nicht herausfinden, wie der Text in der richtigen Reihenfolge zu ziehen.

War es hilfreich?

Lösung

Canvas ist praktisch ein Wrapper um die Leinwand von Skia (native Grafik-Engine). Skia führt keine BiDi / Umbildung, es einfach Sequenzen von Glyphen zieht.

Textview, auf der anderen Art und Weise, verwendet eine Last von Androids textbezogene Objekte, darunter Layout- und abgeleiteten Klassen, die einfach tun (eigentlich stumm) BiDi. Android BiDi ist sehr dumm, dass es nicht einmal Ziffern in RTL umgehen kann. ‚طولي 180‘ angezeigt ‚طولي 081‘

persönlich traue ich nicht Androids aktuelle BiDi, und würde meine eigene Unicode-BiDi-konforme Klasse schreiben und es verwenden, wenn ich brauche. Ich schlage vor, Sie verwenden Sie die manuelle BiDi zusätzlich zur manuellen Umformungs bro. Denken Sie daran: Erste BiDi, dann umformen

Salam

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top