2012-06-17 12 views
5

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); 
     } 
    } 
+0

¿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

Respuesta

1

En su manifiesto, declaramos:

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

Su onSurfaceChanged - el método solo se llamará si declara el configChanges -tributo en el manifiesto!

En cuanto a su segunda cuestión: onVisibilityChanged no es lo que se puede esperar del nombre:

Called when the window containing has change its visibility (between GONE, INVISIBLE, and VISIBLE). Note that this tells you whether or not your window is being made visible to the window manager; this does not tell you whether or not your window is obscured by other windows on the screen, even if it is itself visible.

Es necesario comprobar si su aplicación es "visible" para el usuario a través onPause() y onResume()

+0

Gracias por la respuesta, he cambiado de servicio de fondo de pantalla en vivo a esto: <-filtro intención> - y no funciona :( – Denizen

+0

Mi problema es que estoy constantemente inicializando 20 rectángulos y tengo 40 o más si las declaraciones de un nimándolos. Las declaraciones if se comprueban constantemente incluso cuando estoy listo animando la disminución del rendimiento – Denizen

+0

La respuesta anterior no se aplica a los fondos de pantalla en vivo, sino a las aplicaciones que usan SurfaceView. Por lo tanto, configurar el atributo configChanges no hará nada. Por favor publique más código ... – Ole

Cuestiones relacionadas