开发原生的 Google 眼镜应用 【已翻译100%】(2/2)

使用传感器

Glass没有键盘或触摸屏,但仍然具有移动设备所有的标准的传感器。你可以使用标准的传感器组件来访问这些传感器。

定位和GPS

Glass内置有GPS。TLocationSensor具有一个OnLocationChanged事件,这一事件在GPS组件被激活时产生,在有除Distance性质的以外的位置信息改变时也会产生这一事件。在OnLocationChanged事件的处理方法中,有一个 NewLocation参数,这一参数包含新位置的经纬度。

运动和方向追踪

要追踪Glass和穿戴者的运动和方向,需要使用TMotionSensor和TOrientationSensor组件。它们提供设备的加速度、角度状态、前进方向、速度和运动等信息。由于Glass被用户穿戴在头上,因此设备的这些运动信息实际上被翻译成用户如何张望、头部如何运动等信息。

实际上信息是从很多不同的传感器中获取的,包括陀螺仪、磁力计、加速计。你可以在一段时间内使用一个TTimer来轮询传感器的运动和方向信息,也可以只读取某一个时刻的信息。

Camera处理

TCameraComponent 可以操作相机中的帧. 可以一次抓取多个帧作为预览,也可以一次一帧. Google在抓取图像时需要保持设备的打开状态,但不一定需要展示正在捕获的图像 (尽管展示当前图像更有利于使用者).

调用 TCameraComponent, 设置 Active属性为true, 接着相应OnSampleBufferReadyevent. 记住这一过程不是在 UI 线程里, 所以要想UI 显示更新的图像,需要使用下述代码:

// Event handler for the CameraComponent’s SampleBufferReady event
procedure TMainForm.CameraComponent1SampleBufferReady(Sender: TObject; const ATime: Int64);
Begin// Use Synchronize to move the execution to the main UI thread.TThread.Synchronize(TThread.CurrentThread, GetImage);
end;procedure TMainForm.GetImage;
begin// imgCameraView is a TImage component on the UI for displaying the imageCameraComponent1.SampleBufferToBitmap(imgCameraView.Bitmap, True);
end;

使用触摸板
与touchpad进行交互的最简单的方式是交互式手势。Pan 交互式手势提供了一系列事件当你的手指在触摸板上滑动时。举个例子,你可以使用Pan手势的水平移动来完成不同选项之间的切换。

为响应交互式手势,只需简单的拓展表单的触摸属性,然后指定独特的你想接受事件的交互式手势。 之后,当用户进行交互式手势操作时,OnGesture事件会触发这里有一个手势处理器的例子,允许用户基于交互式手势的水平位置来设置屏幕的超时时间。

procedure TMainForm.FormGesture(Sender: TObject;const EventInfo: TGestureEventInfo; var Handled: Boolean);
varx: Integer;
begin// Handle the Pan Interactive Gestureif EventInfo.GestureID = igiPan thenbegin// Specific processing for the beginning of the gesture – save the start locationif TInteractiveGestureFlag.gfBegin in EventInfo.Flags thenbeginfPanStart := EventInfo.Location;fStartVal := pbTimeOut.Value;endelse// Specific processing at the end of the gesture – set the timeoutif TInteractiveGestureFlag.gfEnd in Eventinfo.Flags thenbeginSetScreenOffTimeout(Trunc(pbTimeOut.Value * 1000));endelse// Update the display based on the current gesture positionbeginif not (TInteractiveGestureFlag.gfInertia in EventInfo.Flags) thenbeginx := Trunc((fPanStart.X - EventInfo.Location.X)/10) * 10;pbTimeOut.Value := fStartVal + x;end;DisplayTimeOut(Trunc(pbTimeOut.Value));end;end;
end;

注意一点,如果用户在触摸板上滑下那么除了Pan手势之外后退按钮事件也会被触发。你可以 自己捕获并处理后退按钮事件。用下面的代码在你的表单中简单的添加OnKeyUp事件处理器:

if Key = vkHardwareBack then
begin  // Do whatever you want to do here  Key := 0;// Set Key = 0 if you want to prevent the default action
end;

如果你总是设置Key为0,那么用户将不能退出应用,因此适当的考虑考虑。

结论

RAD Studio 和Appmethod为开发原生Glassware提供了极大的便利. 加上支持 C++ 和 Object Pascal, 选择的余地大大增加r. RAD Studio还提供了 原生的示例应用演示了上述的种种特性. 文档也详细说明了 操作步骤 . 此外还提供了 使用其它多种感应器,手势动作等等的示例. 想直接进入 GDK 查看相关的细节也很方便. 而且GDK也在一直持续更新. 可以在我后续的Delphi.org的博文中看到 相关GDK的说明.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下php的安装,Linux下PHP安装

1 下载php源码安装包 个人是php-5.6.30.tar.gzphp2 解压文件mysqltar -zxvf php-5.6.30.tar.gznginx3 编译安装sqlcd php-5.6.30api建立www用户和www用户组curlgroupadd wwwsocketuseradd -g www wwwphp-fpm在编译以前先把依赖包都装上urlyum install curl curl-develyum inst…

PHP array_filter()函数与示例

PHP array_filter()函数 (PHP array_filter() Function) array_filter() function is used to apply a filter on array elements based on the function and returns the array with filtered elements, it accepts an array to be checked and a callback function. The call…

微软宣布以 262 亿美元现金收购 LinkedIn

北京时间6月13日20:45(美国当地时间6月13日上午8:45),微软(Nasdaq: MSFT)和LinkedIn(领英,NYSE: LNKD)对外宣布,双方达成协议,微软宣布将以每股196美元、总价262亿美元的价格收购LinkedIn,由现金…

linux vim 快速定位位置,vim快速移动定位的一些操作命令

很多时候你在编辑文件时移动光标都会花很长时间,这样就无法高效的编辑了,要想达到高效编辑最好能够将光标马上定位到你需要的位置,vim就是可以满足你这样需求的一款编辑器,本节就要讲一下vim快速移动定位的一些操作命令。下面的操…

本月初 本月末 java_本月内容作家(2018年8月)

本月初 本月末 javaWe are feeling glad to announce that Prerana Jain is the Content Writer Of The Month (August 2018) on the basis of her excellent contribution and her support to us. 我们很高兴地宣布, Prera​​na Jain凭借其出色的贡献和对我们的支…

“玲珑杯”线上赛 Round #15 河南专场 F 咸鱼文章

elttiL moT nwod eht teerts sllac ruo god ” ehT peek god ” . piZ si a peehs god . tuB nehw moT seirt ot yas ” peeS ” , ti semoc tuo ” peek ” . dnA ni a yaw moT si thgir . piZ si syawla gnignirb sgniht oh rof su ot peek ! ll’I llet uoy tuoba emos fo m…

线性代数向量内积_向量的外积| 使用Python的线性代数

线性代数向量内积Prerequisites: 先决条件: Defining Vector using Numpy 使用Numpy定义向量 Learn: how to code for outer product of two vectors using am inbuilt function in numpy library? 了解:如何使用numpy库中的内置函数为两个向量的外部乘…

c语言案例朗读工具源码,C语言编写简单朗读小工具(有源码)

原标题:C语言编写简单朗读小工具(有源码)最近不少人在后台留言说学C都是面对枯燥的控制台程序,能不能体现一下C语言的实际用途,今天我们就理论结合实践一把:C语言结合VBS脚本编写一个简单的朗读小工具,做一个能够发音的…

WAS集群系列(5):集群搭建:步骤3:安装IHS软件

选择“安装IBM HTTPServer”选项,点击“安装向导”。例如以下图提示: 安装提示,逐步点击“下一步”,当中偶有几处细节注意就可以。列举例如以下: (1)、产品安装路径与先前WAS软件所安装路径统一…

L1-056 猜数字 C语言,PAT L1-032 Left-pad

根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串…

单链表删除整表_单链表删除

单链表删除整表Deletion can be at various positions like: 删除可以在各个位置进行,例如: Deleting the first node 删除第一个节点 Deleting the last node 删除最后一个节点 Deleting the intermediate node 删除中间节点 删除单个链表中的第一个节…

WordPress数据表wp-options数据字段存JSON数据

2019独角兽企业重金招聘Python工程师标准>>> wp_options表是WordPress中最重要的表,一切程序设置、主题设置和绝大多数插件的设置大都保存在此表。 WordPress里面数据表wp-options数据字段存JSON数据 : a:90: {s:11:"^wp-json/?$"…

css scroll属性_CSS中的scroll-behavior属性

css scroll属性CSS | 滚动行为属性 (CSS | scroll-behavior property) Who does not want their links to function smoothly and attractively? This type of functionality is very easy to implement. All you need is a bit of awareness about the property that would h…

c 语言五子棋游戏代码,C语言案例:控制台版本的五子棋游戏【代码】

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼return true;}x;}return false;}bool isLeftInclinedWin(bool isBlack,int x,int y){char c isBlack ? :O;int count;while(x>0 && y>0 && state[x][y] c){y--;x--;}count 0;if(state[x][y] c) count 1…

基于HTML5 Canvas 实现弹出框

用户鼠标移入时,有弹出框出现,这样的需求很常见。这在处理HTML元素实现时简单,但是如果是对 HTML5 Canvas 构成的图形进行处理,这种方法不再适用,因为 Canvas 使用的是另外一套机制,无论在 Canvas 上绘制多…

半素数c语言,非常简单的c题目 不懂 紧急求助

1 半素数素数是指大于1且只有1和他本身两个因子的正整数,例如2、3、5、89都是素数,2、4、10都不是素数。在这里我给半素数下一个定义:一个大于1的正整数能分解为两个素数的乘积,那么这个正整数就是半素数,比如62*3&am…

JavaScript | 嵌套if的示例

Example: 例: In this example, we are reading salary of an employee and finding the discount and net pay based on given salary and discount rate. 在此示例中,我们正在读取员工的薪水,并根据给定的薪水和折扣率找到折扣和净工资。 …

POJ 1014 Dividing 背包

二进制优化,事实上是物体的分解问题。 就是比方一个物体有数量限制,比方是13,那么就须要把这个物体分解为1。 2, 4, 6 假设这个物体有数量为25,那么就分解为1, 2, 4。 8。 10 看出规…

node.js 中间件_Node.js中的Passport中间件(模块)

node.js 中间件Hi! Welcome to Node.js Authentication Series, where well study and program the passport module or middleware. 嗨! 欢迎使用Node.js身份验证系列 ,我们将在其中研究和编程通行证模块或中间件 。 Nowadays, an important tool in m…

android开发自动提示框,Android 多种简单的弹出框样式设置代码

简介这是一个基于AlertDialog和Dialog这两个类封装的多种弹出框样式,其中提供各种简单样式的弹出框使用说明。同时也可自定义弹出框。项目地址:http://www.easck.com/jjdxmashl/jjdxm_dialogui特性1.使用链式开发代码简洁明了2.所有的弹出框样式都在Dial…