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
}