OnSurfaceCreated () se llama cambios de orientación cada vez

Estoy implementando el GLSurfaceView.Renderer así:

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()"); } } 

Esta clase se implementa en 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 es:

 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()); } } 

Muy simple como se puede ver. Cuando ahora comienzo la aplicación, el método onSurfaceCreated () se llama correctamente, sigue por una llamada de onSurfaceChanged ().

El problema ahora es: Siempre que cambie la orientación del dispositivo, recibo otra llamada de onSurfaceCreated () seguida de onSurfaceChanged () .

En mi entendimiento, el método onSurfaceCreated () se llama siempre que una nueva superficie necesita ser creada. Mi pregunta es: ¿Por qué hace eso cada vez que cambio sólo la orientación del dispositivo? ¿No debería ser suficiente que sólo se active una llamada onSurfaceChanged () para ajustar la ventana de visualización?

Tenga en cuenta que no pongo el dispositivo en suspenso al cambiar la orientación.

2 Solutions collect form web for “OnSurfaceCreated () se llama cambios de orientación cada vez”

Haz esto

 <activity android:name=".MainActivity" android:configChanges="keyboardHidden|orientation|screenSize" /> 

La de las ventajas de OpenGL que se refiere al tamaño de la pantalla. Le da la capacidad de manejar todas las resoluciones de Android.

No estoy seguro de cómo funciona con GL20 (seguro de la misma como GL10).

Como sé en onSurfaceChanged proporciona varias configuraciones para OpenGL basadas en longitud / ancho de la pantalla.

Por ejemplo, glViewport

Es necesario llamar glViewport manejador glViewport cuando se modifican las dimensiones de vista GL .

Sólo si usted tiene width = height es innecesario, pero su otra historia.

Como ejemplo

 @Override public void onSurfaceChanged(GL10 gl, int width, int height) { // prevent 0 divide if(height == 0) { height=1; } screenWidth = width; screenHeight = height; ratio = (float) width/height; gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glOrthof(0, width, 0, height, -10f, 10f); gl.glViewport(0, 0, screenWidth, screenHeight); 

Si desea evitarlo, agregue a Manifest.xml:

 <activity android:name="Activity" android:configChanges="screenSize|orientation"> 
  • Captura de video de MediaRecorder en modo retrato
  • ¿Cómo registrar un oyente para el cambio de orientación?
  • GetRotation siempre devuelve cero
  • ¿Cómo debo calcular el azimut, el tono, la orientación cuando mi dispositivo Android no es plano?
  • Manera correcta de usar SOLO Giroscopio y Acelerómetro para obtener el ángulo de corriente fiable en cualquier eje de ANDROID
  • ¿El error de AdView causó que todas las vistas de la Web dejen de cargarse cuando cambia la orientación y se están ejecutando múltiples subprocesos?
  • Bloquear / desbloquear la orientación
  • OpenFL toma la entrada del giroscopio del dispositivo
  • Android: ancho y alto de la vista después del cambio de orientación
  • ¿Cómo conservar la instancia de fragmento de fragmento de reproducción de vídeo después de un cambio de orientación?
  • Android VideoView no se reproduce Orientación de retrato
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.