0

設定:

アクティビティのレイアウトには、SurfaceHolder コールバックが定義された SurfaceView オブジェクト (obj) があります。obj には次のスレッドが定義されています (これは Xamarin を介して C# で記述されています)。

    void DrawThread() {
        Canvas c;
        while (drawingThreadActive) {
            c=null;
            try {
                c = this.Holder.LockCanvas(null);
                lock(Holder) {
                    //force redraw
                    PostInvalidate();
                } 
            } finally {
                if (c!=null) {
                    this.Holder.UnlockCanvasAndPost(c);
                }
            }
            //sleep for 50 ms or so (20Hz refresh)
        }
    }

SurfaceCreated()コールバックは問題なく呼び出され、このスレッドが開始されます。ただし、PostInvalidate() を呼び出しても、onDraw()関数が呼び出されることはありません。

すべてが正しくセットアップされていると確信しています-何が欠けているのか分かりますか?

メソッドが呼び出されることを考えると、SurfaceCreated()「UI に表示される」と想定しています。

私が見逃しているものはありますか?

4

1 に答える 1

1

ここで答えを見つけました - この投稿は重複としてマークできます。: Android: postInvalidate() を無視する SurfaceView?

何らかの理由で、SurfaceView はデフォルトで「描画しない」になっています。修正SetWillNotDraw(false)の呼び出し。SurfaceCreated()

于 2013-10-08T09:18:21.740 に答える