【发布时间】:2013-09-28 12:42:44
【问题描述】:
我正在像这样实现 GLSurfaceView.Renderer:
public class GL20Renderer implements GLSurfaceView.Renderer {
private static GL20Renderer mInstance = new GL20Renderer();
private GL20Renderer() {}
public static GL20Renderer getInstance() {
return mInstance;
}
@Override
public void onDrawFrame(GL10 gl) {
Log.e("App", "onDrawFrame()");
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
Log.e("App", "onSurfaceChanged()");
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
Log.e("App", "onSurfaceCreated()");
}
}
这个类在MainActivity中实现:
public class MainActivity extends Activity {
private GLSurfaceView mGLView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// Create a GLSurfaceView instance and set it as the ContentView for this Activity
mGLView = new GL20SurfaceView(this);
setContentView(mGLView);
}
@Override
protected void onPause() {
super.onPause();
mGLView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mGLView.onResume();
}
}
GL20SurfaceView 是:
public class GL20SurfaceView extends GLSurfaceView {
public GL20SurfaceView(Context context) {
super(context);
// Create an OpenGL ES 2.0 context.
setEGLContextClientVersion(2);
// Set the Renderer for drawing on the GLSurfaceView
setRenderer(GL20Renderer.getInstance());
}
}
如您所见,非常简单。 当我现在启动应用程序时,正确调用了 onSurfaceCreated() 方法,然后调用了一次 onSurfaceChanged()。
现在的问题是:每当设备方向发生变化时,我会再次调用 onSurfaceCreated(),然后调用 onSurfaceChanged()。
据我了解,每当需要创建新表面时,都会调用 onSurfaceCreated() 方法。我的问题是:为什么每当我改变设备方向时它会这样做?仅触发 onSurfaceChanged() 调用以调整视口不就足够了吗?
请注意,更改方向时我不会让设备进入睡眠状态。
【问题讨论】:
-
当方向改变时,默认情况下会重新创建活动。如果您想停止重新加载活动,您需要在 manifest.xml 文件中指定“configChanges”属性
标签: android opengl-es orientation