<WP7>window phone 加速器(重力感应)初体验

原创 2012年03月22日 20:31:57

从我的网易博客移过来的。。。。


WP7的加速感应器。也就是日常所说的实现重力感应的模块。Windows Phone

设备中的加速度感应器是用来度量3个坐标轴加速度的装置。大致坐标如下:


 

 我们所需要做的就是从Accelerometer对象中读取到相应的数据。

 

//MainPage.xaml的代码主要是在ContentPanel中加入以下代码
<Grid.ColumnDefinitions>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="300" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
            </Grid.RowDefinitions>
            <TextBlock Text="X:" Grid.Column="0" Grid.Row="0" Width="88"  Height="82"
                       HorizontalAlignment="Left"
                  VerticalAlignment="Top" FontSize="50"    />
            <TextBox x:Name="TBX" Width="300" Height="80" Grid.Column="1" 
                     HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Row="0" />
            <TextBlock Text="Y:" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left"
                       VerticalAlignment="Top" Width="90" Height="80" FontSize="50"/>
            <TextBox x:Name="TBY" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left"
                     VerticalAlignment="Top" Width="300" Height="80"/>
            <TextBlock Text="Z:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left"
                       VerticalAlignment="Top" Width="90" Height="80" FontSize="50"/>
            <TextBox x:Name="TBZ" Grid.Column="1" Grid.Row="2" Width="300" Height="80"
                     HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <TextBlock Text="CX:" Grid.Column="0" Grid.Row="3" Width="88"  Height="82"
                       HorizontalAlignment="Left"
                  VerticalAlignment="Top" FontSize="50"    />
            <TextBox x:Name="TBCX" Width="300" Height="80" Grid.Column="1" 
                     HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Row="3" />
            <TextBlock Text="CY:" Grid.Row="4" Grid.Column="0" HorizontalAlignment="Left"
                       VerticalAlignment="Top" Width="90" Height="80" FontSize="50"/>
            <TextBox x:Name="TBCY" Grid.Row="4" Grid.Column="1" HorizontalAlignment="Left"
                     VerticalAlignment="Top" Width="300" Height="80"/>
            <TextBlock Text="CZ:" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Left"
                       VerticalAlignment="Top" Width="90" Height="80" FontSize="50"/>
            <TextBox x:Name="TBCZ" Grid.Column="1" Grid.Row="5" Width="300" Height="80"
                     HorizontalAlignment="Left" VerticalAlignment="Top"/>
        </Grid>

效果如下:

 
在MainPage.xaml.cs添加代码前,先添加两个引用。
一个是Microsoft.Devices.Sensors (使用Accelerometer类)
另一个是MicroSoft.Xna.Framework (主要用到的是Vector3类)

//MainPage.xaml.cs代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Devices.Sensors;
namespace AccelerometerDemo
{
    public partial class MainPage : PhoneApplicationPage
    {
        Accelerometer acc;
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            if (!Accelerometer.IsSupported)
            {
                MessageBox.Show("该设备不支持加速器");
            }
            else
            {
                acc = new Accelerometer();
                acc.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(acc_CurrentValueChanged);
//微软推荐的是这个CurrentValueChanged方法来获取当前的坐标值。
                acc.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(acc_ReadingChanged);//这个方法已经过时,但是还是能用
                acc.Start();
            }  
        }
        void acc_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
        {
            Deployment.Current.Dispatcher.BeginInvoke(() => ThreadSafeAccelerometerChanged(e));
        }
        void ThreadSafeAccelerometerChanged(AccelerometerReadingEventArgs e)
        {
            TBX.Text = e.X.ToString("0.000");
            TBY.Text = e.Y.ToString("0.000");
            TBZ.Text = e.Z.ToString("0.000");
        }
        void acc_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
        {
            Deployment.Current.Dispatcher.BeginInvoke(() => ThreadSafeAccelerometerChanged(e));
        }
        void ThreadSafeAccelerometerChanged(SensorReadingEventArgs<AccelerometerReading> e)
        {
     //e.SensorReading.Acceleration就是Vector3类
            TBCX.Text = Convert.ToString(e.SensorReading.Acceleration.X);
            TBCY.Text = Convert.ToString(e.SensorReading.Acceleration.Y);
            TBCZ.Text = Convert.ToString(e.SensorReading.Acceleration.Z);
        }
        
    }
}


 模拟器结果:
模拟器与真机都测试通过
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Flash Builder 开发AIR for Android(7) 重力感应

运动传感器,设备中有个板载的感应器,感应器中有个轴用来感应移动。如x轴,从左到右,y轴从下到上,z轴,从后到钱。 Accelerometer 类。 flash.sensors.Accelerome...

Windows Phone开发学习之三——建立第一个WP7项目

欲使用 Visual Studio 2010 Express for Windows Phone 建立 Windows Phone 7 应用程序,您可以启动 Visual Studio 2010 Ex...

WP7前途无限:Windows Phone开发

WP7前途无限:Windows Phone开发 作者:来源于网络   相信很多人都已经听到了“谷歌达成摩托罗拉收购协议”这条消息 ,这条消息大家都可以看出谷歌发展移动互联网的决心。但是从另一个方面...

[翻译]WP7 QuickStart-第六篇-Windows Phone下文本的使用

原文地址:http://create.msdn.com/en-US/education/quickstarts/Working_with_Text_on_the_Windows_Phone   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)