就我对Android-NDK-thingy的理解而言,它的工作原理如下:我必须使用一个NativeActivity,它本身会调用附加的本机代码来移交一些OpenGL图形上下文。这个上下文可以被原生部分用来绘制一些东西。
到目前为止我还不能解决的问题是:一些GUI元素怎么样?有没有可能仅仅为了创建一些UI元素或者使用布局而从本机代码回调到Java?意味着可以将标准的Android GUI元素也用于这样的本机代码吗?
如果是:如何做到这一点?如果不存在:有什么替代方案(除了手动绘制所有内容)?
谢谢!
发布于 2013-02-09 20:05:00
如果你想在openGL视图上使用图形用户界面的东西,我认为使用一个普通的Activity而不是一个NativeActivity会更好。您可以使用名为GL2JNIActivity的安卓示例。选中that将其从Eclipse导入。
您可以在JNI Library部件(示例中的类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文件。当您通过图形用户界面获得一些输入时,您可以只调用添加到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
}https://stackoverflow.com/questions/14497906
复制相似问题