如果你想在 openGL 视图上使用 GUI 的东西,我认为使用普通的 Activity 而不是 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.)
}
然后在 Activity 本身中(在对应于 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
}