描画関連

void onDraw(Canvas)をオーバーライドして描画を行うのですが、このCanvasってのはjava.awt.Graphicsみたいなグラフィックコンテキストじゃなくて、描画コマンドのリストのような、そんな感じが。
というのも

  • 書いてる最中が見えない。勝手にダブルバッファリングしてるっぽい
  • invalidate()かけないと呼ばれない(画面は明らかに再描画されてるのに)
  • invalidate()かけてもonDraw呼ばれないことがある(ホームキー長押し時とか)

という不思議な作りなので。
まぁ、ホームスクリーンのスクロールからして露骨に「非同期描画してますよ!」って感じの作りではありますが、今時のOSに併せてアプリケーション設計するとこうなりますやね。
ちなみに、WPFFlexはスプライトによるドローツリーを使って非同期描画しています。GDI+みたいなグラフィックコンテキスト使うよりもこっちの方が効率いいらしい(なんか、勝手にDirect3Dとか使ってるらしいし、ダーティレクタングルを自動管理できる)。JavaScriptでDOM経由で描画すること考えると今後はこっちの方向に進むかなぁ。
とはいえ、ダーティレクタングルでは「二重スクロール」とかは最適化できないわけで、非同期描画コマンドをよしななタイミングで流すってのが現実的かな。


あ、もちろん、WindowsFormをばっちり引き継いでいる(つまり、WPFとは縁もゆかりもない).net Compact FrameworkはGDI+を愚直に書いてます。書いているところも横から見えるので、メモリ上のビットマップにいったん書かないとちらつくこと請け合い。.net Compact Frameworkにダブルバッファリングがつくのと、WPF compactが出来るののどっちが先かな。