2014-04-03 17 views
5

Sto cercando di simulare il comportamento di YouTube per Android quando il pulsante "schermo intero" viene cliccato nel lettore video:Commutazione fullscreen e orientamento come YouTube

  • Se il dispositivo è attualmente in ritratto, ruotare immediatamente paesaggio (anche se l'utente sta ancora tenendo il dispositivo in verticale) e rimane in orizzontale finché l'utente non ruota il dispositivo in orizzontale e quindi torna al ritratto
    • Se il dispositivo è attualmente in orizzontale, ruotare immediatamente su verticale (anche se l'utente è ancora tenendo il dispositivo in verticale) e rimanere in verticale finché l'utente non ruota il dispositivo in verticale e quindi ruota indietro t o paesaggio.
    • In qualsiasi momento, consentire all'utente di ruotare manualmente il proprio dispositivo con l'orientamento desiderato.

Sembra che se forzo la rotazione a orizzontale o verticale utilizzando:

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

o

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

... perdo subito la capacità di rilevare l'orientamento del sensore modifiche (vale a dire una volta che l'utente è in orizzontale e vogliono ruotare manualmente il dispositivo in verticale).

Se si modifica l'orientamento richiesto a non specificato o sensore in onConfigurationChanged, l'orientamento si inverte brevemente in orizzontale/verticale (qualunque sia la richiesta che ho richiesto dall'alto) e quindi si aggancia all'orientamento corrispondente a come viene tenuto il dispositivo.

Qualche idea su come raggiungere i miei obiettivi sopra?

risposta

8

Ho avuto lo stesso problema. Quello che ho finito è stato usare un OrientationListener per rilevare quando l'utente aveva effettivamente inclinato il telefono in orizzontale e quindi impostare l'orientamento su SCREEN_ORIENTATION_SENSOR.

OrientationEventListener orientationEventListener = 
new OrientationEventListener(getActivity()) { 
    @Override 
    public void onOrientationChanged(int orientation) { 
     int epsilon = 10; 
     int leftLandscape = 90; 
     int rightLandscape = 270; 
     if(epsilonCheck(orientation, leftLandscape, epsilon) || 
      epsilonCheck(orientation, rightLandscape, epsilon)){ 
       getMainActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
      } 
     } 

     private boolean epsilonCheck(int a, int b, int epsilon) { 
      return a > b - epsilon && a < b + epsilon; 
     } 
    }; 
    orientationEventListener.enable(); 

Ecco la documentazione per OrientationEventListener: Documentation

Si sarebbe anche bisogno di aggiungere i controlli per il ritratto, perché lei ha descritto bisogno che nel tuo post originale.

+1

Questa dovrebbe essere la risposta selezionata. Inoltre potrebbe fare Math.abs (a - b)

+0

Grazie mille. Per me funziona – BalaramNayak

Problemi correlati