SurfaceViewの描画メソッドについて
大きな画像を分割してcanvasに貼りつけて表示をし、マウスでぐりぐりするアプリを開発中。
Viewで実装したが割とカクカクするんで、高速化を求めてSurfaceViewを採用してみた。
なんとか動きましたよレベルのものは作れたが、不具合が・・・
この問題さえ回避できれば、速度向上ができたし問題ないんだけどなぁ。
その不具合というのが、アプリを起動して画像が表示されるが何か暗い。
省エネモードに入った感じの暗さで表示される・・・・ why?
/** * アプリケーションが呼び出す描画関数 */ public void hogeDraw() { Canvas canvas = getHolder().lockCanvas(); if (canvas != null) { try { xDraw(canvas); } finally { getHolder().unlockCanvasAndPost(canvas); } } else { Log.i("fastDraw", "couldnt get canvas"); } }
xDrawで実際に描画。
これだと予定した動作はするんだけど、前述通り暗い。何故か暗い。
あと、発見したことだけど
xDraw(canvas)のところを、overrideした関数(onDrawとかdrawとか)で実装すると、2回目以降に呼ばれたときにgetHolder().lockCanvas()からcanvasが取れなくなる。
何故か取れなくなる。
そもそもそんなもん呼ぶなよって思われそうだけど、知識がないからいろいろ試すしか・・・w
SurfaceViewのcanvasと、メインのcanvasは別物という記述を見たことがあるけど、そのへんが影響してるのかなー・・・。
ただし、これでやると前述の暗いってのが解消されるんだよなぁ・・・。
だけど、2回目以降canvasが取れなくなるからグリグリができなくなる。
起動して表示してハイおしまい!という誰得アプリに・・・
とりあえず、なんで暗くなるのか調べないと!