スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



drawLineの移植

MIDPのGraphics.drawLineの移植。

MIDPには2つの線種しかない。

・直線 (SOLID)
・破線 (DOTTED)

破線をAndroidで実現するには,
DashPathEffectを利用する。

このクラスで破線の間隔を設定する。

http://developer.android.com/intl/ja/reference/android/graphics/DashPathEffect.html

コンストラクタは以下のとおり。

DashPathEffect(float[] intervals, float phase)

第一引数に間隔,第二引数に開始位置を設定する。
第一引数の配列の要素は常に2の倍数でないといけない。

これは破線の幅と空間の幅が1つの組になっているから。
Androidのサンプルにもあったが,phaseの値を描画のたびに更新すると
線がアニメーションしているように見える。

大抵のときは第二引数は0で問題ないでしょう。

DashPathEffectインスタンスをPaint.setPathEffect()に設定すればOK。
あとはPaintの線の幅や線のスタイル(Paint.Style.STROKE)を設定して終わり。


drawText()のY軸のアンカーポイントの謎

drawLine()の移植が終わった後に,
drawText()の表示位置について調査。

MIDPではデフォルトでLEFT, TOPをアンカーに文字列が表示されていたいのですが,
AndroidではLEFT,BOTTOM(またはBASELINE?)で表示される。

こっちのが世の中標準の考え方なのかな...。


DisplayMetricsのdensityDpiの謎
DisplayMetricsでディスプレイの状態を取得することができるのだけど,
densityDpiの値は仮想な値が入っている。

自分が実機デバッグしている端末は106SHなんだけど
321dpiなんだけど,densityDpiの値は320。

この値について検索して調べてみると,実際のdpiではなくて
デフォルトの160dpiの倍数に丸められているように見える。

この値をもとに対応するリソースフォルダ(drawable-ldpiとか)を選択するということだろうか。
リファレンスみても詳しい説明がのっていない。

今回は画面サイズを特定しているからいいけど,
いろんな解像度とDPIに対応させる方法がまだわからない。

とくにアスペクト比の違いってどうやって吸収しているのだろうか...。


drawBitmapの謎
BitmapFactoryでResourcesクラスを渡すと,スクリーンのdensityDpiにあわせて
画像を拡大・縮小して読み込んでくれます。

drawBitmapに渡す座標は生の座標になるので,
画像はスケーリングされているが,座標は自前でスケーリングしないといけない。

なんかこれって変だよな...。


いろいろ疑問は残しつつ,
移植の作業を優先して進めてます> <
関連記事
スポンサーサイト

テーマ : ゲーム開発
ジャンル : コンピュータ




コメントの投稿

非公開コメント

アクセス
あなたは
キーワード
カテゴリー
最近の記事
リンク
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

WEB検索
Google

RSSフィード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。