2

私が Android-NDK-thingy を理解している限り、それは次のように機能します。いくつかの OpenGL グラフィックス コンテキストを渡す添付のネイティブ コードを呼び出す NativeActivity を使用する必要があります。このコンテキストは、ネイティブ部分が何かを描画するために使用できます。

今までいじることができなかったこと: いくつかの GUI 要素はどうですか? いくつかの UI 要素を作成し、おそらくレイアウトを使用するためだけに、ネイティブ コードから Java にコールバックする可能性はありますか? そのようなネイティブ コードでも標準の Android GUI 要素を使用することは可能ですか?

はいの場合: どうすればこれを行うことができますか? そうでない場合: どのような代替手段がありますか (すべてを手動で描画することを除く)?

ありがとう!

4

1 に答える 1

4

openGL ビューで GUI を使用する場合は、NativeActivity の代わりに通常のアクティビティを使用する方がよいと思います。GL2JNIActivity という Android サンプルを使用できます。Eclipse からインポートする場合にチェックします。

一部のネイティブ関数は、JNI ライブラリ パーツ (サンプルではクラス JNILib) で宣言できます。GUIリスナーが呼び出されたときに呼び出すもの。基本的には次のようになります。

public class GL2JNILib {

 static {
     // Maybe you need to load other relevant libraries here
     System.loadLibrary("gl2jni");
 }

 public static native void init(int width, int height);
 public static native void step();

 /*Add here your native functions to send to the native code*/     
 public static native void buttonClicked();
 //... add other listeners here (i.e: screen touched, etc.)

}

次に、アクティビティ自体 (クラス JNIActivity に対応するサンプル内) で、通常どおり XML GUI ファイルをロードするだけです。GUI を介して何らかの入力を取得すると、GL2JNI クラスに追加されたネイティブ関数を呼び出すことができます。多かれ少なかれ、次のようになります。

public class GL2JNIActivity extends Activity {

    GL2JNIView mView;
    Button mButton;

    @Override protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        mView = new GL2JNIView(getApplication());
        setContentView(mView);
        mButton = (Button)findViewById(R.id.your_button);        
        mButton.setOnClickListener( new Button.OnClickListener(){
            @Override
            public void onClick(View v) {
                mView.buttonClicked();
            }
        });
    }

    /*...*/
}

最後に、ネイティブ側でネイティブ関数を実装する必要があります。

JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_buttonClicked(
            JNIEnv * env, jobject obj)
{
    // will be called when the button is clicked
}
于 2013-02-09T12:04:59.620 に答える