惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
V
Visual Studio Blog
小众软件
小众软件
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
IT之家
IT之家
Vercel News
Vercel News
C
Check Point Blog
Google DeepMind News
Google DeepMind News
月光博客
月光博客
D
DataBreaches.Net
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog

博客园 - Doho

【推荐】《精通.NET互操作:P/Invoke,C++ Interop和COM Interop》 荣获“微软精英大挑战”一等奖 [推荐]美名腾Beta版 [发布]Quartz.NET 示例程序:企业调度器 V0.2 源代码 Quartz.NET 架构与源代码分析系列 part 3 :Trigger 触发器 Quartz.NET 架构与源代码分析系列 part 2 :Job 作业 Quartz.NET 架构与源代码分析系列 part 1 :Quartz.NET 入门 Quartz.NET 架构与源代码分析系列 Silverlight Cards---Silverlight Streaming 的使用 Silverlight 2.0 Beta 2 xaml 命名空间问题的解决 .NET框架下的并行处理方案 Microsoft Parallel Extensions 微软中国有限公司董事长张亚勤博士来重庆大学演讲 Linq To Anything Community Server 的缓存方案 我的ASP.NET分页 微软亚洲研究院的“人立方”搜索 推荐一款任务栏加强软件 Image Cup,我和几位师兄一起奋战! 一款好玩的小软件
支持手势的 Windows Mobile 工具条
Doho · 2009-11-05 · via 博客园 - Doho

htc touch diamond 的图片管理器有一个可左右伸缩的工具条,用起来很方便 (图 1)。现在我们来实现一个可左右伸缩又支持手势的工具条 (图 2)。

htc touch diamond toolbox

toolbox with gesture support

图 1. htc touch diamond 的图片管理器

图 2. toolbox with gesture support,效果图

绘制工具条

我们简单地新建一个用户控件,添加图片框作为图标按钮,再把它添加到主窗口。在窗口初始化处设置工具条高度和位置。image

public Form1()
{
    InitializeComponent();

    
//set the tool box to dock right
    toolbox.Height = this.Height;
    toolbox.Location 
= new Point(this.Width, 0);
}

HTC G-Sensor

HTC G-Sensor,加速度感应器,又叫重力感应器。由于它比较小巧,可以内嵌到其它设备中。现在很多智能手机都有 G-Sensor,比较常见的有 HTC 和 Samsun。本文的例子是使用 HTC  的 G-Sensor。

现在 HTC 上G-Sensor 的三维数据精度已经达到了双精度。由G-Sensor 可以开发出很多很有趣的重力感应游戏,比如 Resco Snake

下面我们就来介绍如何访问 HTC 的G-Sensor。

网上有现成的控件(c#)直接调用,或者可以参照 codeplex 上的 sensor api。由不同库封装得到的数据不一样,但都可以进行简单的比例转换就可以得到相同的数据。我们选用accelerometer.dll。

HTCGSensor gsensor = new HTCGSensor();//Initialize a HTCGSensor object to access htc g-sensor
GVector vector = gsensor.GetGVector();//call GetGVector() method to get a current GVector

为了得到连续的数据,我们在一个 timer 里调用GetGVector()。
GVector 是一个结构体,用来表示一个受力状态,原型如下:

Code

下面两张图片是两个状态的演示(来自codeplex):

clip_image002

竖直放置,x,y,z 分量分别为:0, -9.8, 0

clip_image004

水平放置,x,y,z 分量分别为:0, 0, -9.8

手势

定义手势 Shack left:手机正面正对着用户,往左摇一下。Shack right 类似。我们从G-Sensor 读取的数据来判断手势,取样频率 20Hz。这里只判断 X 轴的分量,数据用 excel 绘出图来:

image

我们先监视值小于2的X,置状态为1,接着监视在 5~15 范围内的X,再置状态为0,完成一个往左甩的手势。为了消除抖动,我们加入了时间判断,即一个手势的时间范围为 10~500 毫秒。程序如下:

        

Code

小结

这里,我们结合 G-Sensor 来完成对一个工具条的控制,比较新颖,控制起来也比普通的模式有乐趣。手势判断比较简单,也可以自己分析数据,再写一个不同的手势处理,比如甩两下,就触发某一动作。

示例代码:WMToolbox