WP開發 實現「搖一搖」功能

2022-01-10 10:33:50 字數 2058 閱讀 2023

重力加速度既可以用於判斷手機當前所放置的方向,也可以用來檢測運動方向,當使用者甩手機時就會產生運動加速度。

位於windows.devices.sensors命名空間下的accelerometer類封裝了重力加速器相關的操作,「搖一搖」可以判斷手機在x,y,z三個方向上的加速度來實現,甩手機時比較激動,因此,x,y,z三個值的絕對值都會大於1,用力甩的話可以達到1.7,1.8左右,不知道能不能達到2,反正我沒試過,高空墜落時可能會有,有興趣的朋友可以從樓頂把手機扔下去試試。

對於使用感測器時的座標系,使用的裝置座標,不論是哪個感測器,裝置座標的位置和方向是一樣的,這裡我畫了乙個草圖,不是十分準確,但我相信初中生都能看懂。

箭頭所指的方向是正方向,相反的方向就是負方向。

有了以上的思想準備,估計你都知道怎麼做了,原理是分別讀取x,y,z三軸上的資料,然後判斷它們的值,如果值較大,說明手機正在「激情」中,即使用者在甩動手機。

先給大家講講例子,我這個例子不複雜,就是先準備好10張mm的靚照,當手機被甩時,從10張**中隨機抽出一張來顯示。

accelerometer類本來有乙個shaken事件,當甩手機時發生,但這個事件目前只在平板電腦上引發,在手機上不會發生。畢竟rt的api沒有完全移植。雖然不引發該事件,不過我們可以通過加速器的讀數自己來判斷。

首先,獲取加速器的例項。

accelerometer acc = null

; ........

acc = accelerometer.getdefault();

很簡單,乙個getdefault就能返回相關的例項。然後,設定一下報告實時資料的時間間隔,因為甩動的話,不需要過於精確,我這裡選擇200毫秒報告一次,也不必須太快。

acc.reportinterval = 200;
接著,處理當前程式視窗的visibilitychanged事件,當視窗可見時才讀取加速度資料,視窗不可見時讀了也沒什麼用。

window.current.visibilitychanged +=onwindowvisibilitychanged;

........

private

void onwindowvisibilitychanged ( object

sender, windows.ui.core.visibilitychangedeventargs e )

else

}

當有新的讀數報告時,會發生readingchanged事件,處理該事件,就能獲取到x,y,z軸上的讀數。

async

void

acc_readingchanged ( accelerometer sender, accelerometerreadingchangedeventargs args )

, y= , z=

", x, y, z);

await

dispatcher.runasync(windows.ui.core.coredispatcherpriority.normal,

async () =>

});}

我這裡把三個讀數都乘以100,只是我覺得好看罷了,如果你不喜歡就不用乘以100了。

因為使用者「搖一搖」的時候,我們**並不關心他向哪個方向甩,反正他是在甩動即可,所以,在判斷的時候可以取x,  y,  z的絕對值,用於判斷的參考數字不是固定的,大家可以自己試,試到合適的數字就可以了。我這裡是當x上的值的絕對值大於145(1.45),y的絕對值大於140(1.4),z的絕對值大於155(1.55)時就認為是使用者在搖動手機。

就是這樣,「搖一搖」功能就出來了,然後各位可以在真面上搖幾下(模擬器上很難測),就看到mm了。結果如下圖:

好,牛皮吹完了,下次有空再吹。

WP開發 實現「搖一搖」功能

重力加速度既可以用於判斷手機當前所放置的方向,也可以用來檢測運動方向,當使用者甩手機時就會產生運動加速度。位於windows.devices.sensors命名空間下的accelerometer類封裝了重力加速器相關的操作,搖一搖 可以判斷手機在x,y,z三個方向上的加速度來實現,甩手機時比較激動,...

wp搖一搖功能

在這篇文章中我們將介紹 windows phone 的搖晃功能。讓我們來看如何實現。step 2 解壓後進入 shakegesture 的 debug 資料夾 step 3 建立乙個 sliverlight for windows phone 專案 step 4 將 shakegestures dl...

ios 搖一搖功能實現

搖一搖功能的實現,這裡簡單的介紹兩種 1 根據加速計的值來判斷,比如說可以根據acceleration.x,acceleration.y,acceleration.z的值來判斷是否搖動了。關於感測器的介紹可以看我的這篇文章 void motionbegan uieventsubtype motion...