Actualmente estoy trabajando en un fondo de pantalla en vivo que es muy intenso y no maneja la rotación de la pantalla muy bien.Live Wallpaper Screen Rotation
¡De hecho, el fondo de pantalla se destruye y muestra una pantalla en blanco sin llamar a Surface Change!
Aquí es lo que tengo dentro del método onSurfaceChanged:
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub
super.onSurfaceChanged(holder, format, width, height);
mRatio = (float) width/height;
if (mRatio > 1) {
orientation = 0;
}
if (mRatio < 1) {
orientation = 1;
}
setRunning(true);
Log.i(TAG, "Screen Rotation...");
mHandle.post(r);
}
Estoy seguro de que este método no se consiga llamar porque no hay mensaje de registro.
¿Por qué ocurre esto y cuáles son algunas técnicas para manejar la rotación de la pantalla? ¿Podría ser que mi fondo de pantalla en vivo sea tan intenso que no se pueda llamar al vacío?
Además, onVisibilityChanged no se llama así, y al abrir aplicaciones en el emulador, no hay ningún mensaje de registro:
@Override
public void onVisibilityChanged(boolean visible) {
// TODO Auto-generated method stub
super.onVisibilityChanged(visible);
if (visible) {
setRunning(true);
Log.i(TAG, "Visible...");
mHandle.postDelayed(r, 2000);
} else {
setRunning(false);
Log.i(TAG, "Invisible...");
mHandle.removeCallbacks(r);
}
}
¿Podrías publicar más código? Necesita saber dónde se hace todo el trabajo pesado. En mi fondo de pantalla animado, se llama tanto aSurfaceChanged como a onVisibilityChanged durante las rotaciones de pantalla. Además, verifique LogCat por algo como "Tiempo de espera esperando que el papel tapiz se desplace" durante el cambio de orientación. – Ole