开发原生的 Google 眼镜应用 【已翻译100%】(2/2)
使用傳感器
Glass沒(méi)有鍵盤或觸摸屏,但仍然具有移動(dòng)設(shè)備所有的標(biāo)準(zhǔn)的傳感器。你可以使用標(biāo)準(zhǔn)的傳感器組件來(lái)訪問(wèn)這些傳感器。
定位和GPS
Glass內(nèi)置有GPS。TLocationSensor具有一個(gè)OnLocationChanged事件,這一事件在GPS組件被激活時(shí)產(chǎn)生,在有除Distance性質(zhì)的以外的位置信息改變時(shí)也會(huì)產(chǎn)生這一事件。在OnLocationChanged事件的處理方法中,有一個(gè) NewLocation參數(shù),這一參數(shù)包含新位置的經(jīng)緯度。
運(yùn)動(dòng)和方向追蹤
要追蹤Glass和穿戴者的運(yùn)動(dòng)和方向,需要使用TMotionSensor和TOrientationSensor組件。它們提供設(shè)備的加速度、角度狀態(tài)、前進(jìn)方向、速度和運(yùn)動(dòng)等信息。由于Glass被用戶穿戴在頭上,因此設(shè)備的這些運(yùn)動(dòng)信息實(shí)際上被翻譯成用戶如何張望、頭部如何運(yùn)動(dòng)等信息。
實(shí)際上信息是從很多不同的傳感器中獲取的,包括陀螺儀、磁力計(jì)、加速計(jì)。你可以在一段時(shí)間內(nèi)使用一個(gè)TTimer來(lái)輪詢傳感器的運(yùn)動(dòng)和方向信息,也可以只讀取某一個(gè)時(shí)刻的信息。
Camera處理
TCameraComponent 可以操作相機(jī)中的幀. 可以一次抓取多個(gè)幀作為預(yù)覽,也可以一次一幀. Google在抓取圖像時(shí)需要保持設(shè)備的打開狀態(tài),但不一定需要展示正在捕獲的圖像 (盡管展示當(dāng)前圖像更有利于使用者).
調(diào)用 TCameraComponent, 設(shè)置 Active屬性為true, 接著相應(yīng)OnSampleBufferReadyevent. 記住這一過(guò)程不是在 UI 線程里, 所以要想U(xiǎn)I 顯示更新的圖像,需要使用下述代碼:
// 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進(jìn)行交互的最簡(jiǎn)單的方式是交互式手勢(shì)。Pan 交互式手勢(shì)提供了一系列事件當(dāng)你的手指在觸摸板上滑動(dòng)時(shí)。舉個(gè)例子,你可以使用Pan手勢(shì)的水平移動(dòng)來(lái)完成不同選項(xiàng)之間的切換。
為響應(yīng)交互式手勢(shì),只需簡(jiǎn)單的拓展表單的觸摸屬性,然后指定獨(dú)特的你想接受事件的交互式手勢(shì)。 之后,當(dāng)用戶進(jìn)行交互式手勢(shì)操作時(shí),OnGesture事件會(huì)觸發(fā)這里有一個(gè)手勢(shì)處理器的例子,允許用戶基于交互式手勢(shì)的水平位置來(lái)設(shè)置屏幕的超時(shí)時(shí)間。
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;注意一點(diǎn),如果用戶在觸摸板上滑下那么除了Pan手勢(shì)之外后退按鈕事件也會(huì)被觸發(fā)。你可以 自己捕獲并處理后退按鈕事件。用下面的代碼在你的表單中簡(jiǎn)單的添加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;如果你總是設(shè)置Key為0,那么用戶將不能退出應(yīng)用,因此適當(dāng)?shù)目紤]考慮。
結(jié)論
RAD Studio 和Appmethod為開發(fā)原生Glassware提供了極大的便利. 加上支持 C++ 和 Object Pascal, 選擇的余地大大增加r. RAD Studio還提供了 原生的示例應(yīng)用演示了上述的種種特性. 文檔也詳細(xì)說(shuō)明了 操作步驟 . 此外還提供了 使用其它多種感應(yīng)器,手勢(shì)動(dòng)作等等的示例. 想直接進(jìn)入 GDK 查看相關(guān)的細(xì)節(jié)也很方便. 而且GDK也在一直持續(xù)更新. 可以在我后續(xù)的Delphi.org的博文中看到 相關(guān)GDK的說(shuō)明.
總結(jié)
以上是生活随笔為你收集整理的开发原生的 Google 眼镜应用 【已翻译100%】(2/2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python中面向对象的编程
- 下一篇: 共享马扎的火爆,原来是一场营销!