Xamarin.Essentials: OrientationSensor
OrientationSensor sınıfı, bir cihazın yönlendirmesini üç boyutlu alanda izlemenizi sağlar.
Not
Bu sınıf, bir cihazın 3B alanda yönünü belirlemeye yöneliktir. Cihazın video ekranının dikey mi yoksa yatay modda mı olduğunu belirlemeniz gerekiyorsa, sınıftan kullanılabilen DeviceDisplay
nesnenin ScreenMetrics
özelliğini kullanınOrientation
.
Kullanmaya başlayın
Bu API'yi kullanmaya başlamak için kitaplığın projelerinizde düzgün yüklendiğinden ve ayarlandığından emin olmak için Xamarin.Essentials kullanmaya başlama kılavuzunu okuyun.
OrientationSensor kullanma
Sınıfınızda için Xamarin.Essentials bir başvuru ekleyin:
using Xamarin.Essentials;
OrientationSensor
, cihazın yönlendirmesine Start
yapılan değişiklikleri izlemek için yöntemini çağırarak etkinleştirilir ve yöntemi çağrılarak Stop
devre dışı bırakılır. Tüm değişiklikler olay üzerinden ReadingChanged
geri gönderilir. Örnek kullanım aşağıda verilmiştir:
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
okumaları, iki 3B koordinat sistemini temel alarak cihazın yönünü açıklayan bir Quaternion
biçiminde geri bildirilir:
Cihazda (genellikle bir telefon veya tablet) aşağıdaki eksenlere sahip bir 3B koordinat sistemi vardır:
- Pozitif X ekseni dikey modda ekranın sağını gösterir.
- Pozitif Y ekseni, dikey modda cihazın en üstüne işaret eder.
- Pozitif Z ekseni ekrandan dışarıyı gösterir.
Dünya'nın 3B koordinat sistemi aşağıdaki eksenlere sahiptir:
- Pozitif X ekseni Dünya'nın yüzeyine tanjanttır ve doğuya doğru ilerler.
- Pozitif Y ekseni de Dünya'nın yüzeyine tanjanttır ve kuzeye doğru ilerler.
- Pozitif Z ekseni Dünya yüzeyine diktir ve yukarı doğru ilerler.
cihazın Quaternion
koordinat sisteminin Dünya'nın koordinat sistemine göre dönüşünü açıklar.
Değer Quaternion
, eksen etrafında döndürmeyle çok yakından ilgilidir. Döndürme ekseni normalleştirilmiş vektör (x, y,z) ve döndürme açısı Θ ise, quaternion'ın (X, Y, Z, W) bileşenleri şunlardır:
(ax·sin(Θ/2), ay·sin(Θ/2), az·sin(Θ/2), cos(Θ/2))
Bunlar sağ koordinat sistemleridir, bu nedenle sağ elin başparmağı döndürme ekseninin pozitif yönüne işaret edilmişken, parmakların eğrisi pozitif açıların dönüş yönünü gösterir.
Örnekler:
Cihaz, ekranı yukarı bakan bir tabloda düz bir şekilde uzandığında, cihazın üst kısmı (dikey modda) kuzeyi işaret ettiğinde, iki koordinat sistemi hizalanır.
Quaternion
değeri kimlik quaternion'ını (0, 0, 0, 1) temsil eder. Tüm döndürmeler bu konuma göre analiz edilebilir.Cihaz ekranı yukarı bakan bir tabloda düz ve cihazın üst kısmı (dikey modda) batıya
Quaternion
dönük olduğunda değer (0, 0, 0, 0,707, 0,707) olur. Cihaz Dünya'nın Z ekseni etrafında 90 derece döndürüldü.Cihaz dik tutulduğunda, üst (dikey modda) gökyüzüne doğru işaret ettiğinde ve cihazın arkası kuzeye dönük olduğunda, cihaz X ekseni etrafında 90 derece döndürülür. Değer
Quaternion
: (0,707, 0, 0, 0,707).Cihaz sol kenarı bir tabloda ve üst noktalar kuzeyde olacak şekilde konumlandırılmışsa, cihaz Y ekseni etrafında –90 derece (veya negatif Y ekseni çevresinde 90 derece) döndürülmüştür. Değer
Quaternion
: (0, -0,707, 0, 0,707).
Algılayıcı Hızı
- En hızlı – Sensör verilerini mümkün olan en hızlı şekilde alın (UI iş parçacığında döndürüleceği garanti değildir).
- Oyun – Oyunlara uygun fiyat (kullanıcı arabirimi iş parçacığında döndürülmesi garanti değildir).
- Varsayılan – Ekran yönlendirme değişiklikleri için uygun varsayılan hız.
- Ui – Genel kullanıcı arabirimi için uygun oran.
Olay işleyicinizin kullanıcı arabirimi iş parçacığında çalışması garanti değilse ve olay işleyicisinin kullanıcı arabirimi öğelerine erişmesi gerekiyorsa, ui iş parçacığında bu kodu çalıştırmak için yöntemini kullanın MainThread.BeginInvokeOnMainThread
.