Pergunta

Eu estou tentando desenhar texto em árabe em um Bitmap para exibição:

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

A classe ArabicUtilities é uma ferramenta para reformular o texto unicode assim que as letras estão conectados. ver: http://github.com/agawish/Better-Arabic-Reshaper/

No entanto, o bitmap que é gerado parece com isso:

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

Quando ele deve ser parecido ????

Creio que a questão é porque, ao contrário de um TextView , a classe Bitmap não tem conhecimento BiDi, por isso atrai as letras da esquerda para a gravação.

Tente como eu poderia, eu não posso descobrir como desenhar o texto na ordem correta.

Foi útil?

Solução

Canvas é praticamente um invólucro em torno do Canvas de Skia (motor gráfico nativos). não Skia não realizar nenhuma BiDi / remodelar, ele simplesmente chama seqüências de glifos.

TextView, por outro lado, usa uma carga de objetos relacionados com o texto do Android, entre eles Layout e classes derivadas que fazem simples (na verdade mudo) BiDi. do Android BiDi é muito burra que não pode sequer lidar com dígitos em RTL: '???? 180' é exibido '???? 081'

.

Pessoalmente eu não confio atual BiDi do Android, e iria escrever minha própria classe compatível com Unicode BiDi e usá-lo se eu precisar. Eu sugiro que você use manual de BiDi além do bro reformulação manual. Lembre-se: Primeira BiDi, então reformular

Salam

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top