使用傳感器
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的說明.