スポンサーサイト

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

SurfaceViewで縦横がおかしい

青い空では、SurfaceViewを使っているのですが、
端末によっては横にした際に上手く表示できないという障害がありました。
(横にしているのに、縦横が逆に返ってくる。端末のデフォルトと逆にしたときに発生するようです。)


ただ、IS01でも、Archos7HTでも、Webstationでも、エミュレータでも平気なので、どうせ中華端末だったり、
CFWだったりするんだろうな・・・と思って無視していましたが、001HTでも発生するという事実に驚愕したので、
改めて調査してみました。


で、調べてみたところ、
surfaceCreated⇒surfaceChanged⇒surfaceChanged
と実行され、2度目のsurfaceChangedに初めて縦横正しい値が入ってくるというものでした。
※正しく値が返る端末ではそれぞれ1度ずつしか実行されない。

surfaceChangeで、ファイルの読み込み処理を開始するのですが、
AsyncTaskがある程度進んだ段階で描画を開始してしまいます。
この時のページ計算などで、1度目のsurfaceChangedでの縦横を利用していたために、おかしな描画になってしまっていました。
2度目のsurfaceChangedにて、すでにAsyncTaskが走っていたら、キャンセルをして、再度・・・
という処理をいれたのですが、cancelして、すぐonCanceledが呼ばれるわけではないので、
別途フラグなどによりタスクの実行を同期させるなど必要があったり結構シビアな難しいケースも想定されたので、別の方式を検討することにしました。
※postExxecuteで最後一括して処理するタイプなら話は結構簡単だったんですけどね・・・

続きを読む

スポンサーサイト
スポンサードリンク
アプリ一覧
最新記事
最新コメント
最新トラックバック
検索フォーム
月別アーカイブ
カテゴリ
RSSリンクの表示
リンク
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。