私はアンドロイドが複雑なテキストレンダリング、特に合字とシェイプのためのアラビア語のサポートが不十分であることをサポートしていませんでした。特定のユニコードエスケープコードを使用してアラビア語の文字列を表示することで、整形上の問題を回避することはできますが、diacraticsを正しく表示することはできません。組み込みのcanvas.drawTextを避けて複雑なテキストレンダリング - テキストをビットマップにレンダリングし、代わりにイメージビューに表示する方法はありますか?
テキストはjava.awt.Graphics2Dを使用してグラフィックで適切にレンダリングするが、それはアンドロイドでサポートされていない、そのコードは次のとおりです。
InputStream is = converter.class.getResourceAsStream("ARIAL.TTF");
Font font = Font.createFont(Font.TRUETYPE_FONT, is);
Font medium_font = font.deriveFont(32f);
BufferedImage sizedBufferedImage = new BufferedImage((rounded_width+10),(rounded_height+14), BufferedImage.TYPE_INT_ARGB);
Graphics2D g_sized = sizedBufferedImage.createGraphics();
g_sized.setColor(Color.black);
g_sized.setFont(medium_font);
g_sized.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g_sized.drawString(word_arabic, 5, 7+max_ascent);
ByteArrayOutputStream imgoutstr = new ByteArrayOutputStream();
ImageIO.write(sizedBufferedImage, "png", imgoutstr);
私はその後、ImageIOでを使用してビットマップにGraphics2Dオブジェクトを取得することができます最後にImageViewに表示します。文字列がデータベースから来ているため、実行時にこれを行う必要があります。
私の問題は、グラフィクスオブジェクトに単語を書き込む代わりに、最終的に画像ビューとしてアンドロイドに表示するためのドロアブル/ビットマップに入ることができます。私はアンドロイドのテキストをバイパスしようとしていますユニコードを完全にサポートし、必要な複雑なテキストレンダリングを処理できる代替テキストレンダラーを使用しています。それをイメージに入れて、それをレンダリングしようとするのではなく、画像として単語をそのまま表示させることができます。
アンドロイドキャンバスの代わりにグラフィックスオブジェクトにテキストを描画する方法はありますか?レンダリングされたグラフィックスオブジェクトをアンドロイドが使用できるビットマップに入れますか? Androids canvas.drawStringは文字列を正しくレンダリングせず、複雑なテキストの場合はGraphics2Dとは異なるテキストをレンダリングします。