2012-02-15 14 views
7

mam Aktywność, która potrzebuje jego orientację być zablokowane zWykrywanie orientacji telefonu z wydarzeniami czujników

setRequestedOrientation(screenOrientation); 

Ale chcę otrzymywać aktualizacje orientacji, tak, że mogę zrobić korekty w interfejsie (wyobrazić HTC aparatu aplikacja, gdy tylko ikony przycisków zmieniają orientację). Więc znalazłem this class. Dostarcza wartości orientacji od 0 do 360. Czy filtrować te wartości, tj. Idealny interwał [a, b], a jeśli a<x<b to orientacja jest krajobrazowa lub portretowa? Obliczenie oznacza? Jakieś wskazówki?

Odpowiedz

7

Wygląda na to, że potrzebujesz kodu, aby reagował tylko wtedy, gdy orientacja urządzenia zmieniła się na jedną z 4 normalnych orientacji zamiast pod każdym kątem. Spowoduje to odfiltrowanie orientacji tylko na wartości 0, 90, 180 i 270 stopni:

OrientationEventListener myOrientationEventListener; 
    int iOrientation; 

    myOrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) 
    { 

     @Override 
     public void onOrientationChanged(int iAngle) 
     {       // 0 15 30 45 60 75, 90 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345 
      final int iLookup[] = {0, 0, 0,90,90, 90,90, 90, 90, 180, 180, 180, 180, 180, 180, 270, 270, 270, 270, 270, 270, 0, 0, 0}; // 15-degree increments 
      if (iAngle != ORIENTATION_UNKNOWN) 
      { 
       int iNewOrientation = iLookup[iAngle/15]; 
       if (iOrientation != iNewOrientation) 
       { 
        iOrientation = iNewOrientation; 
        // take action on new orientation here 
       } 
      } 
     } 
    }; 

    // To display if orientation detection will work and enable it 
    if (myOrientationEventListener.canDetectOrientation()) 
    { 
    Toast.makeText(this, "Can DetectOrientation", Toast.LENGTH_LONG).show(); 
     myOrientationEventListener.enable(); 
    } 
    else 
    { 
    Toast.makeText(this, "Can't DetectOrientation", Toast.LENGTH_LONG).show(); 
    } 
+0

Musiałem nieco zmienić wartości odnośników, aby działał z moim sprzętem, ale to działa dobrze. Szkoda, że ​​nie było lepszego sposobu, aby to zrobić, ale do tego czasu wykonuje swoją pracę. Dzięki! – nrflaw

+1

Kto kiedykolwiek opublikował to jest G! Od jakiegoś czasu utknąłem na tym problemie bez pomocy metody getResources(). GetConfiguration(). – Matt

Powiązane problemy