Android にメッセージウィンドウを移植中… 
2013/09/26 Thu [edit]

Android エミュレータ
ADV型のメッセージウィンドウを付けると少しゲームっぽくなるね。
やっぱりこの機能はなかなか面倒くさい(笑)。文字列の幅や高さを計算するのに FontMetrics と言うものを使ってるんだが、Applet と Android では取得オブジェクトが違っていた。
Applet では Font オブジェクトから取得するんだけど、Android では Paint オブジェクトから取得するみたい。というのもフォントの設定や色も Paint オブジェクトなんだよね。図形を描いたりする時も Paint オブジェクトを使うから、ちょっとややこしい気がする。
また基本的に考え方は変わらないけど、取得できる値も微妙に違う。プロパティ値はどうやらベースラインからの距離になっているようだ。Applet は大きさって感じで正の値だったけど、Android は負の値も出る。そのまま移植したら、当然画面が変になった(笑)。

FontMetrics 図解
調べてみたら、こんな感じだったけど、top, ascent は負の値で出るね。baseline からの距離みたい。あと float 型なので、値が細かい。そのまま使ったら、微妙に文字列間隔などが綺麗に並んで見えなかったので、小数点以下切り捨てて、整数型として使ってみた。そしたら綺麗に並んで見えた。
あと、getFontMetrics(null) で得られるフォントの高さは、プロパティ:ascent と descent の距離を足したものと同値になるね。ascent は負の値なので、height = descent - ascent で計算すると良い。Applet には getHeight() メソッドがあったから、計算の必要は無かったけどね。
こういうものはやってみないとわからないので、コピペではやっぱり移植はできないね~。Java のライブラリももっと統一感出ればやり易いんだけどね。内部の値を一つ一つ確認していくのは骨が折れる。まだまだ時間はかかりそう…。
※イラスト:こばP さん
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/81-85681bbc
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |