您的位置:首页 > 其它

WP利用Accelerometer类制作加速度测量器。

2014-07-24 17:24 316 查看
MainPage.xaml中部分代码:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock VerticalAlignment="Top" Text="x:" Name="XLabel" Style="{StaticResource PhoneTextNormalStyle}" Margin="42,124,386,0"></TextBlock>
<TextBlock VerticalAlignment="Top" Text=" " Name="XTextBlock" Style="{StaticResource PhoneTextExtraLargeStyle}" Margin="86,100,20,0" Foreground="{StaticResource PhoneAccentBrush}"></TextBlock>
<TextBlock VerticalAlignment="Top" Text="y:" Name="YLabel" Style="{StaticResource PhoneTextNormalStyle}" Margin="42,236,386,0"></TextBlock>
<TextBlock VerticalAlignment="Top" Text=" " Name="YTextBlock" Style="{StaticResource PhoneTextExtraLargeStyle}" Margin="86,212,52,0" Foreground="{StaticResource PhoneAccentBrush}"></TextBlock>
<TextBlock VerticalAlignment="Top" Text="z:" Name="ZLabel" Style="{StaticResource PhoneTextNormalStyle}" Margin="42,332,386,0"></TextBlock>
<TextBlock VerticalAlignment="Top" Text=" " Name="ZTextBlock" Style="{StaticResource PhoneTextExtraLargeStyle}" Margin="86,308,54,0"  Foreground="{StaticResource PhoneAccentBrush}"></TextBlock>
<TextBlock VerticalAlignment="Top" Text="Total:" Name="TotalLabel" Style="{StaticResource PhoneTextNormalStyle}" Margin="24,420,386,0"></TextBlock>
<TextBlock VerticalAlignment="Top" Text=" " Name="TotalTextBlock" Style="{StaticResource PhoneTextExtraLargeStyle}" Margin="86,400,54,0"  Foreground="{StaticResource PhoneAccentBrush}"></TextBlock>
<TextBlock VerticalAlignment="Top" Text="status:" Name="statusLabel" Style="{StaticResource PhoneTextNormalStyle}" Margin="24,11,0,0" HorizontalAlignment="Left" Width="72" />
<TextBlock VerticalAlignment="Top" Text="accelerometer stopped" Name="statusTextBlock" Style="{StaticResource PhoneTextNormalStyle}" Foreground="{StaticResource PhoneAccentBrush}" Margin="102,11,6,0" />

</Grid>


MainPage.cs中部分代码:

建立一个Accelerometer对象accelerometer:

Accelerometer accelerometer;在mainpage的构造函数添加一个applicationBar并为之添加一个控制加速器开关的按钮:
public MainPage()
{
InitializeComponent();

ApplicationBar = new ApplicationBar();
ApplicationBar.IsVisible = true;

ApplicationBarIconButton startStopButton = new ApplicationBarIconButton(new Uri("/Images/startstop.png", UriKind.Relative));
startStopButton.Text = "on/off";
startStopButton.Click += new EventHandler(startStopButton_Click);
ApplicationBar.Buttons.Add(startStopButton);
}

为按钮添加事件处理函数:(强调一下,在老版本中ReadingChanged事件是加速度器数值改变时执行的事件,而新版本已改用CurrentValueChanged事件,因此我用了CurrentValueChanged事件处理)。  

void startStopButton_Click(object sender, EventArgs e)
{
// 构造并开始
if (accelerometer == null)
{
accelerometer = new Accelerometer();

//老版本加速度改变事件
//accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(accelerometer_ReadingChanged);
//wp8加速度改变事件
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged;

try
{
statusTextBlock.Text = "starting accelerometer";
accelerometer.Start();
}
catch (AccelerometerFailedException exception)
{
statusTextBlock.Text = "error starting accelerometer";
}
}
else
{
try
{
accelerometer.Stop();
accelerometer = null;
statusTextBlock.Text = "accelerometer stopped";
}
catch (AccelerometerFailedException exception)
{
statusTextBlock.Text = "error stopping accelerometer";
}

}
}实现委托函数,这里设计到UI线程访问问题,在此不做过多解释。
void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
{
Deployment.Current.Dispatcher.BeginInvoke(() => ChangeUI(e));
}

完成ChangeUI函数(这里记得要引用程序集Microsoft.Xna.Framework):  

void ChangeUI(SensorReadingEventArgs<AccelerometerReading> e)
{
if (accelerometer != null)
{
statusTextBlock.Text = accelerometer.State.ToString();
Vector3 v3 = e.SensorReading.Acceleration;

XTextBlock.Text = v3.X.ToString("0.00");
YTextBlock.Text = v3.Y.ToString("0.00");
ZTextBlock.Text = v3.Z.ToString("0.00");

TotalTextBlock.Text = v3.Length().ToString();
}
}
ok,加速度器完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  wp