読者です 読者をやめる 読者になる 読者になる

がりらぼ

WindowsRuntimeの応援ブログ

単純なデバイスの向きを検知するには

単純なデバイスの方向

デバイスの傾きを取得するなら、加速度センサーを利用できますが、SimpleOrientationクラスを使用すると、デバイスが縦向きなのか、横向きなのか、画面が上なのか、画面が下なのかなど、単純なデバイスの向きを簡単に取得することができます。

 

取得できる種類は以下の6つです。

  • NotRotated

デバイス回転なし

IMG_3664

  • FaceUp

画面が上方向

IMG_3665

 

  • FaceDown

画面が下方向

IMG_3666

 

  • Rotated90DegreesCounterclockwise

デバイスが反時計回りに90度回転

IMG_3671

 

  • Rotated180DegreesCounterclockwise

デバイスが反時計回りに180度回転

IMG_3670

 

  • Rotated270DegreesCounterclockwise

デバイスが反時計回りに270度回転

IMG_3669

 

SimpleOrientation

単純なデバイスの方向を取得するには、SimpleOrientationクラスを使います。

このようなXAML UIを用意します。

<Grid>
    <TextBlock x:Name="text_orientation" FontSize="24" />
</Grid>

 

コンストラクタでSimpleOrientationクラスを初期化し、デバイスの傾きが変わると、OrientationChangedイベントが発生します。

Orientationプロパティを取得することでSimpleOrientation列挙体の値を取得することができます。

SimpleOrientationSensor sensor = SimpleOrientationSensor.GetDefault();
sensor.OrientationChanged += async(s, ee) =>
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        switch(ee.Orientation)
        {
            case SimpleOrientation.Faceup:
                text_orientation.Text = ee.Orientation.ToString();
                Debug.WriteLine(ee.Orientation.ToString());
                break;
            case SimpleOrientation.Facedown:
                text_orientation.Text = ee.Orientation.ToString();
                Debug.WriteLine(ee.Orientation.ToString());
                break;
            case SimpleOrientation.Rotated90DegreesCounterclockwise:
                text_orientation.Text = ee.Orientation.ToString();
                Debug.WriteLine(ee.Orientation.ToString());
                break;
            case SimpleOrientation.Rotated180DegreesCounterclockwise:
                text_orientation.Text = ee.Orientation.ToString();
                Debug.WriteLine(ee.Orientation.ToString());
                break;
            case SimpleOrientation.Rotated270DegreesCounterclockwise:
                text_orientation.Text = ee.Orientation.ToString();
                Debug.WriteLine(ee.Orientation.ToString());
                break;
            case SimpleOrientation.NotRotated:
                text_orientation.Text = ee.Orientation.ToString();
                Debug.WriteLine(ee.Orientation.ToString());
                break;
        }
    });
};

 

単純なデバイスの方向を検知するには | garicchi.com