2

メイン アクティビティと OpenGL レンダラーの間のフローがわかりません。

私のアプリが起動すると、「レンダリングを開始」というボタンで作成した非常にきれいなレイアウトがユーザーに表示されます。ユーザーがボタンをクリックすると、素晴らしい絵を描くレンダラー ビューに転送されます。そして絵が完成したらメイン画面(ボタンのある方)に戻りたいのですが、どうしたらいいのかわかりません。

GLRenderer から setContentView(R.layout.activity_run) を呼び出してみましたが、明らかにうまくいきません。次に、関数 Run.endRendering() を作成しようとしました。これは静的メソッドであり、GLRenderer 内から呼び出されました。Run.endRendering() は、ビューをメイン画面に戻すことを期待して setContentView(R.layout.activity_run) を呼び出すことになっていましたが、R.endRendering() は静的メソッドであるため、 setContentView() の非静的メソッド。

だから今、私は完全に迷っています。誰かがこの主題に光を当てることができますか?

これらは私が持っているスケルトンです。

主な活動:

public class Run extends Activity
{
    private GLSurfaceView glSurface;

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

        // in here I mess with the main layout view the user
        // is supposed to see. when he/she clicks on a button
        // he/she will be transferred to the opengl view

        // on button click:
        glSurface = new GLSurfaceView(this);
        glSurface.setRenderer(new GLRenderer());

        setContentView(glSurface);
    }
}

そしてレンダラー:

public class GLRenderer implements Renderer
{
    // onSurfaceCreated, onDrawFrame, onSurfaceChanged, etc.

    // the action happens here. From here I want to return to
    // the main activity that created this renderer.
}
4

1 に答える 1

0

できることの 1 つは、GLSurfaceView をそのアクティビティのレイアウトの一部にすることです。アクティビティの UI スレッドは引き続き実行されます。レイアウトからGLSurfaceViewを削除し、通常の非openglビューを表示するハンドラーを作成します。

Handler mainHandler = new Handler() {
    public void handleMessage(Message msg) {
         // remove surfaceview from layout and show non-opengl views
    }
};

次に、アクティビティの参照を (おそらくインターフェイスを使用して) GLRenderer に渡すことができます。呼び出すことができます。

activity.mainHandler.sendMessage(msg)
于 2012-11-28T17:17:00.447 に答える