2016-01-26 25 views
5

現在、TTFファイルから読み込まれた外部(非標準)フォントを使用している間にCanvasでテキストを描画しています。私が表示しているテキストにカーニングを有効にしたい。AndroidのTTFファイルからカーニングペアテーブルを読み込む方法

私が知りたいのは、Android APIを使ってタイプフェースからカーニングペアを読む可能性があるということです。

+0

[この古い質問](http://stackoverflow.com/q/1640659/2564301)(ただしとして、最近のように答えkernテーブルがJavaに公開されていないことを示唆しています。生ファイルデータを "手動で"解析することは実行可能なオプションですか? (いくつかの異なる表形式があることに注意してください、すべて同じようにひどいです...) – usr2564301

+0

ありがとう、Jongware。私は、* .ttfファイルを解析するのに気にしません。どこにカーニングペアを探すべきかについての情報があります(私は通常、恐ろしいフォーマットを少し恐れています)。 –

+0

[OpenType仕様](https://www.microsoft.com/typography/otspec/default.htm)に記載されているように、[The Kerning Table](https://www.microsoft.com/タイポグラフィ/ otspec/kern.htm)。間違いなく、かすかな心のためではありません。もしあなたが本当に不運なのであれば、あなたが使ったフォントはタイプ1のタイプなので、 'GPOS'サブテーブルを解析する必要があります。これはまだ大変です(これは、キャンバスの 'drawText'のプログラマーは単純に気にしなかった...) – usr2564301

答えて

5

私が知りたいのは、Android APIを使用してタイプフェースからカーニングペアを読む可能性がある場合です。

TTFファイルからカーニングペアを読み取るパブリックAPIはありません。しかし、私はApache FOPから関連コードを引いたので、this libraryを使ってカーニングペアを読むことができます。

使用例:

TTFFile file = TTFFile.open(getAssets().open("fonts/font.ttf")); 
Map<Integer, Map<Integer, Integer>> kerning = file.getKerning(); 

また、他のメタデータを取得することができます。例:

TTFFile ttfFile = TTFFile.open(new File("/system/fonts/Roboto-Regular.ttf")); 

String name = ttfFile.getFullName();    // "Roboto Regular" 
String family = ttfFile.getSubFamilyName();  // "Regular" 
int fontWeight = ttfFile.getWeightClass();  // 400 
String copyright = ttfFile.getCopyrightNotice(); // "Font data copyright Google 2014" 

私は私が表示していますテキストのカーニングを有効にしたいです。

を参照してください:

How to adjust text kerning in Android TextView?

setLetterSpacing(float)

+0

ありがとう、私はそれを試してみるとあなたに戻ってきます。 'setSpacing()'メソッドに関しては、文字列のすべての文字に間隔が設定され、カーニングが特定の文字ペアに対してのみ調整されるので、それほど同じではありません。 –

+1

あなたはライブラリを試しましたか?必要に応じてmavenにアップロードすることができます。私はそれで数時間を過ごしたので、うまくいけばその時間はあなたのプロジェクトにとって役に立ちました:-) –

+0

だから...最初のマップのキーはペアの最初の文字のコードですか?したがって、 'kerning.get(firstChar)'は、ペア内の 'firstChar'に関連付けられた全てのcharctersのマップを返さなければなりません。したがって、 'kerning.get(firstChar).get(secondChar)'は 'firstChar'に続いて' secondChar'で構成されるペアのオフセットを返すべきです。右?実際の価値はどういう意味ですか?例えば、 '-40'です。これは、2番目の文字をシフトする必要がある幅の割合です(負の場合 - 左へ)。説明してください。 –

関連する問題