[Titanium] dpとpixelの変換

Androidアプリ with TitaniumMobileに挑戦中。iPhoneだと動くコードが動かない理不尽さを見ていると、HTMLを書いてIE6で見ると崩れまくっていたあの頃を思い出しますね。

さて、そんなandroidでは、解像度の異なる端末に対応するため、数値はdip指定するのが原則です。

  • New Defaults for Android Layouts in 1.7 « Appcelerator Developer Center
  • Y.A.M の 雑記帳: Android multi screen 対応
  • ところが、view.animateとか、scrollView.setContentOffsetのように構造体をとる関数はたいていdp表記に未対応で、pixel単位で指定してあげる必要があります。変換関数が必要!

    このあたりのことはこの記事で解説されていて、

    TitaniumMobileのハマりポイントとお作法メモ at HouseTect, JavaScriptな情報をあなたに

    dpとpixclの変換関数なんかも提案されているのですけど、用途と合わなかったので、俺バージョンを作りました。

    元コードとの違いは

    • View.widthなどで取得できる ‘100dp’などの記述をそのまま渡せるようにした
    • 同様に、view.widthにそのまま渡すことを意識して、dpは’100dp’みたいな文字列で返すようにした

    というあたりです。

    KitchenSinkでNo such file or directory: u’./Resources/comic_zine_ot.otf’

    sxchu_1011518_50479789_font.jpg

    今すぐフォローすべきTitanium Mobileの人達に名前を上げていただいていることに今更気づいたmogyaです。こんにちは。
    ちなみに明日まで東京滞在中です。顔を見たいという奇特な方は、明日のプログラマーズカフェに遊びに来ていただけると嬉しいです。

    さて、TitaniumMobileのお手本帳、appcelerator/KitchenSink。最近、コマンドラインからビルドすると、こういうエラーで止まってしまいませんか。

    [INFO] Detected custom font: comic_zine_ot.otf
    [ERROR] Error: Traceback (most recent call last):
    File “/Library/Application Support/Titanium/mobilesdk/osx/1.6.2/iphone/builder.py”, line 948, in main shutil.copy(f,app_dir)
    File “/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/shutil.py”, line 88, in copy copyfile(src, dst)
    File “/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/shutil.py”, line 52, in copyfile fsrc = open(src, ‘rb’)
    IOError: [Errno 2] No such file or directory: u’./Resources/comic_zine_ot.otf’

    どうやら

    /Library/Application\ Support/Titanium/mobilesdk/osx/1.7.1/iphone/builder.py run ./

    と相対パス指定するとダメで、

    /Library/Application\ Support/Titanium/mobilesdk/osx/1.7.1/iphone/builder.py run ~/develop/KitchenSink/

    という具合にプロジェクトフォルダのパスを指定してあげないといけないみたい。

    それとは別に、「Your TARGET_BUILD_DIR is incorrectly set. 」問題もあるんだけど、こっちの原因はわからないw
    昨日Titanium meetup Tokyoで聞いたんだけど、地道にbuild/iphone/以下を削除するとか、project/cleanを試すとかしかないと言われました。
    XCodeで設定をいじっても直らないわりに、一晩寝ると直ってたりするんですよね・・