FrameLayoutでCanvasを弄る

📅 2013/07/02

Android

Viewが持っているCanvasのdrawBitmapを使ってスタンプもどきの実装をしていて詰んだのでメモ。 ViewにBitmapを貼ったり線を引きたい場合はonDrawをOverrideして貼り付けてやればいい。


    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLUE);
        canvas.drawBitmap(mStampBitmap, onTouchCurrent.x, onTouchCurrent.y, null);
    }

FrameLayoutも同様にonDrawでいけるかなと思ってやってみたが最初の1度だけでonTouchListener内でinvalidate()を呼んでもだめだった。 他にdraw(Canvas canvas)という関数もあったがこれもだめであった。 dispatchDraw(Canvas canvas)はinvalidate()後に実行されるようなのでこちらで描画処理をすることにした。

    @Override
    protected void dispatchDraw(Canvas canvas) {
        // move 10pixel
        canvas.translate(10,10);
        super.dispatchDraw(canvas);
    }