Číst v angličtině

Sdílet prostřednictvím


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ě.

Začínáme

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.

Použití funkce OrientationSensor

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í.

rozhraní API