Xamarin.Essentials: OrientationSensor
Klasa OrientationSensor umożliwia monitorowanie orientacji urządzenia w trójwymiarowej przestrzeni.
Uwaga
Ta klasa służy do określania orientacji urządzenia w przestrzeni 3D. Jeśli musisz określić, czy ekran wideo urządzenia jest w trybie pionowym lub poziomym, użyj Orientation
właściwości ScreenMetrics
obiektu dostępnego DeviceDisplay
w klasie .
Rozpocznij
Aby rozpocząć korzystanie z tego interfejsu API, przeczytaj przewodnik wprowadzający , Xamarin.Essentials aby upewnić się, że biblioteka jest prawidłowo zainstalowana i skonfigurowana w projektach.
Używanie elementu OrientationSensor
Dodaj odwołanie do Xamarin.Essentials klasy:
using Xamarin.Essentials;
Parametr OrientationSensor
jest włączony przez wywołanie Start
metody w celu monitorowania zmian orientacji urządzenia i wyłączenia przez wywołanie Stop
metody . Wszelkie zmiany są wysyłane z powrotem za pośrednictwem ReadingChanged
zdarzenia. Oto przykładowe użycie:
public class OrientationSensorTest
{
// Set speed delay for monitoring changes.
SensorSpeed speed = SensorSpeed.UI;
public OrientationSensorTest()
{
// Register for reading changes, be sure to unsubscribe when finished
OrientationSensor.ReadingChanged += OrientationSensor_ReadingChanged;
}
void OrientationSensor_ReadingChanged(object sender, OrientationSensorChangedEventArgs e)
{
var data = e.Reading;
Console.WriteLine($"Reading: X: {data.Orientation.X}, Y: {data.Orientation.Y}, Z: {data.Orientation.Z}, W: {data.Orientation.W}");
// Process Orientation quaternion (X, Y, Z, and W)
}
public void ToggleOrientationSensor()
{
try
{
if (OrientationSensor.IsMonitoring)
OrientationSensor.Stop();
else
OrientationSensor.Start(speed);
}
catch (FeatureNotSupportedException fnsEx)
{
// Feature not supported on device
}
catch (Exception ex)
{
// Other error has occurred.
}
}
}
OrientationSensor
odczyty są zgłaszane z powrotem w postaci Quaternion
elementu opisującego orientację urządzenia na podstawie dwóch układów współrzędnych 3D:
Urządzenie (zazwyczaj telefon lub tablet) ma układ współrzędnych 3D z następującymi osiami:
- Dodatnia oś X wskazuje prawą część ekranu w trybie pionowym.
- Dodatnia oś Y wskazuje górną część urządzenia w trybie pionowym.
- Dodatnia oś Z wskazuje na ekran.
Układ współrzędnych 3D Ziemi ma następujące osie:
- Dodatnia oś X jest tangensem powierzchni Ziemi i punktów na wschód.
- Dodatnia oś Y jest również tangensem na powierzchni Ziemi i punktów na północ.
- Dodatnia oś Z jest prostopadła na powierzchnię Ziemi i wskazuje w górę.
Opis Quaternion
obrotu układu współrzędnych urządzenia względem układu współrzędnych Ziemi.
Quaternion
Wartość jest bardzo ściśle powiązana z rotacją wokół osi. Jeśli oś obrotu jest znormalizowanym wektorem (x,y,z), a kąt obrotu to Θ, wówczas (X, Y, Z, W) składniki kwaternionu to:
(ax·sin(Θ/2),a y·sin(Θ/2),a z·sin(Θ/2), cos(Θ/2))
Są to układy współrzędnych prawej strony, więc z kciukiem prawej ręki skierowanym w kierunku dodatnim osi obrotu krzywa palców wskazuje kierunek obrotu dla kątów dodatnich.
Przykłady:
Gdy urządzenie znajduje się płasko na stole z ekranem skierowanym do góry urządzenia (w trybie pionowym) wskazującym na północ, dwa układy współrzędnych są wyrównane. Wartość
Quaternion
reprezentuje kwaternion tożsamości (0, 0, 0, 0, 1). Wszystkie rotacje można analizować względem tej pozycji.Gdy urządzenie znajduje się płasko na tabeli z ekranem skierowanym w górę, a górna część urządzenia (w trybie pionowym) wskazuje na zachód,
Quaternion
wartość to (0, 0, 0,707, 0,707). Urządzenie zostało obrócone o 90 stopni wokół osi Z Ziemi.Gdy urządzenie jest trzymane w pionie, tak aby górny (w trybie pionowym) wskazuje na niebo, a tył urządzenia stoi na północ, urządzenie zostało obrócone o 90 stopni wokół osi X. Wartość
Quaternion
to (0,707, 0, 0, 0,0,707).Jeśli urządzenie jest ustawione tak, aby lewa krawędź znajduje się na tabeli, a górne punkty na północ, urządzenie zostało obrócone –90 stopni wokół osi Y (lub 90 stopni wokół ujemnej osi Y). Wartość
Quaternion
to (0, -0,707, 0, 0,707).
Szybkość czujnika
- Najszybsze — jak najszybciej pobierz dane czujnika (nie ma gwarancji powrotu do wątku interfejsu użytkownika).
- Gra — stawka odpowiednia dla gier (nie ma gwarancji powrotu do wątku interfejsu użytkownika).
- Ustawienie domyślne — częstotliwość domyślna odpowiednia dla zmian orientacji ekranu.
- Interfejs użytkownika — szybkość odpowiednia dla ogólnego interfejsu użytkownika.
Jeśli program obsługi zdarzeń nie ma gwarancji, że zostanie uruchomiony w wątku interfejsu użytkownika, a program obsługi zdarzeń musi uzyskać dostęp do elementów interfejsu użytkownika, użyj MainThread.BeginInvokeOnMainThread
metody , aby uruchomić ten kod w wątku interfejsu użytkownika.