onCreate内でのCanvasの取得について

992 views
Skip to first unread message

小島 俊範

unread,
Dec 23, 2009, 4:41:00 AM12/23/09
to android-g...@googlegroups.com
初めまして,小島と申します.

最近Android(SDK1.6)でアプリを作り始めたのですが,
SurfaceViewのCanvasのサイズを取得しようとして以下のようなコードを書いたところ,
下の8行目にあたるところでcanvasが取得できずnullとなってしまいました.
いろいろ試行錯誤を重ねては見たのですが,
解決方法の検討がつかず行き詰まってしまいました.
どなたかよい解決方法をご存じの方がいましたらご教授願います.

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        SurfaceView sv = (SurfaceView)findViewById(R.id.SurfaceView01);

        Canvas canvas = sv.getHolder().lockCanvas();

        int h = canvas.getHeight();
        int w = canvas.getWidth();

        sv.getHolder().unlockCanvasAndPost(canvas);

    }

Satoshi Ogata

unread,
Dec 23, 2009, 9:55:03 PM12/23/09
to android-g...@googlegroups.com
小島さん
緒方です。

Canvas を取得するタイミングが早すぎるのではないでしょうか。

onCreate では SurfaceView がまだ画面上に表示されてないため
確実に準備ができたタイミングで描画されるのが良いと思います。

具体的には SurfaceHolder.Callback を SurfaceHolder に addCallback で
設定し、surfaceCreated で Canvas を取得すれば間違いないです。

2009/12/23 小島 俊範 <kojim...@gmail.com>:

> --
>
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。
>

小島 俊範

unread,
Dec 24, 2009, 12:44:14 AM12/24/09
to android-g...@googlegroups.com
緒方さん

返信ありがとうございます!
おかげさまで無事解決することができました。
やはり取得するタイミングが問題だったんですね...
助かりました、重ねてありがとうございました。

2009年12月24日11:55 Satoshi Ogata <satos...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages