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が取れなくなるからグリグリができなくなる。
起動して表示してハイおしまい!という誰得アプリに・・・

とりあえず、なんで暗くなるのか調べないと!