Xamarin.Essentials: OrientaceSensor
Třída OrientationSensor umožňuje monitorovat orientaci zařízení v trojrozměrném prostoru.
Poznámka
Tato třída slouží k určení orientace zařízení ve 3D prostoru. Pokud potřebujete zjistit, jestli je zobrazení videa zařízení v režimu na výšku nebo na šířku, použijte Orientation
vlastnost objektu, který ScreenMetrics
je k dispozici ve DeviceDisplay
třídě.
Pokud chcete začít používat toto rozhraní API, přečtěte si úvodní příručkuXamarin.Essentials, abyste měli jistotu, že je knihovna správně nainstalovaná a nastavená ve vašich projektech.
Přidejte do Xamarin.Essentials předmětu odkaz:
using Xamarin.Essentials;
Tato OrientationSensor
možnost je povolena voláním Start
metody pro monitorování změn v orientaci zařízení a zakázána voláním Stop
metody. Všechny změny se posílají zpět prostřednictvím ReadingChanged
události. Tady je ukázkové využití:
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
čtení se ohlašují zpět ve formě Quaternion
, která popisuje orientaci zařízení na základě dvou 3D souřadnicových systémů:
Zařízení (obecně telefon nebo tablet) má 3D souřadnicový systém s následujícími osami:
- Osa X ukazuje vpravo od displeje v režimu na výšku.
- Osa Y ukazuje na začátek zařízení v režimu na výšku.
- Osa Z ukazuje mimo obrazovku.
3D souřadnicový systém Země má následující osy:
- Osa X je tečná k povrchu Země a bodů na východ.
- Osa Y je také tečná k povrchu Země a bodů na sever.
- Osa Z je kolmá na povrch Země a směřuje nahoru.
Popisuje Quaternion
otočení souřadnicového systému zařízení vzhledem ke souřadnicovém systému Země.
Hodnota Quaternion
velmi úzce souvisí s otáčením kolem osy. Pokud je osou otočení normalizovaný vektor (x,y, az) a úhel otáčení je Θ, pak jsou součásti kvarternionu (X, Y, Z, W):
(ax·sin(Θ/2), ay·sin(Θ/2), az·sin(Θ/2), cos(Θ/2))
Jedná se o souřadnicové systémy na pravé straně, takže palcem pravé ruky ukazující kladným směrem osy otáčení, křivka prstů označuje směr otáčení pro kladné úhly.
Příklady:
Když zařízení leží v tabulce s obrazovkou směrem nahoru a horní částí zařízení (v režimu na výšku) směřujícím na sever, zarovnají se tyto dva souřadnicové systémy. Hodnota
Quaternion
představuje kvaternion identity (0, 0, 0, 1). Všechna otočení se dají analyzovat vzhledem k této pozici.Když zařízení leží v tabulce s obrazovkou směrem nahoru a horní část zařízení (v režimu na výšku) směřující na západ,
Quaternion
hodnota je (0, 0, 0,707, 0,707). Zařízení bylo otočené o 90 stupňů kolem osy Z země.Když je zařízení vzpřímené, aby horní (v režimu na výšku) odkazoval na oblohu a zadní část zařízení se na sever otočila o 90 stupňů kolem osy X. Hodnota
Quaternion
je (0,707, 0, 0, 0,707).Pokud je zařízení umístěné tak, aby jeho levý okraj byl v tabulce a horní body na sever, bylo zařízení otočené o 90 stupňů kolem osy Y (nebo 90 stupňů kolem záporné osy Y). Hodnota
Quaternion
je (0, -0,707, 0, 0,707).
- Nejrychlejší – co nejrychleji získejte data ze snímačů (není zaručeno, že se vrátíte na vlákno uživatelského rozhraní).
- Hra – Rychlost vhodná pro hry (není zaručeno vrácení na vlákno uživatelského rozhraní).
- Výchozí – Výchozí rychlost vhodná pro změny orientace obrazovky.
- UŽIVATELSKÉ rozhraní – Rychlost vhodná pro obecné uživatelské rozhraní.
Pokud obslužná rutina události není zaručena spuštění ve vlákně uživatelského rozhraní a pokud obslužná rutina události potřebuje přístup k prvkům uživatelského rozhraní, použijte metodu MainThread.BeginInvokeOnMainThread
ke spuštění kódu ve vlákně uživatelského rozhraní.