自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

【WP開發(fā)】實現“搖一搖”功能

移動開發(fā)
盡管我的微信是每八個月登錄一次,但我相信各位玩得比我多。微信有一個“搖一搖”功能,這個功能其實是利用了加速度傳感器來實現的,這個傳感器,我估計再低端的手機都會有的,這是嚴重基本的傳感器。

盡管我的微信是每八個月登錄一次,但我相信各位玩得比我多。微信有一個“搖一搖”功能,這個功能其實是利用了加速度傳感器來實現的,這個傳感器,我估計再低端的手機都會有的,這是嚴重基本的傳感器。

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

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

對于使用傳感器時的坐標系,使用的設備坐標,不論是哪個傳感器,設備坐標的位置和方向是一樣的,這里我畫了一個草圖,不是十分準確,但我相信初中生都能看懂。

[[120978]]

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

有了以上的思想準備,估計你都知道怎么做了,原理是分別讀取X,Y,Z三軸上的數據,然后判斷它們的值,如果值較大,說明手機正在“激情”中,即用戶在甩動手機。

不僅是“搖一搖”,使用這個,還可以做音樂播放器的切歌操作。比如,向左甩播放上一首歌,向右甩播下一首歌。左右甩動只需判斷X軸上的值即可,舉個 例子,當X軸上的值小于-1.6時,可以認為用戶正在拼命向左甩動;如果大于1.6表明用戶把手機向右甩。同理,向上甩動Y軸的值為正值,值越大;向下甩 則Y軸上的值為負,值越??;把手機屏幕對著天空用力拋的時候,Z軸上的值為正,值越來越大;反之越來越小。

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

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

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

  1. Accelerometer acc = null
  2.         ........ 
  3.  
  4.         acc = Accelerometer.GetDefault(); 

很簡單,一個GetDefault就能返回相關的實例。然后,設置一下報告實時數據的時間間隔,因為甩動的話,不需要過于精確,我這里選擇200毫秒報告一次,也不必須太快。

  1. acc.ReportInterval = 200

接著,處理當前程序窗口的VisibilityChanged事件,當窗口可見時才讀取加速度數據,窗口不可見時讀了也沒什么用。

  1. Window.Current.VisibilityChanged += OnWindowVisibilityChanged; 
  2.      ........ 
  3.       private void OnWindowVisibilityChanged ( object sender, Windows.UI.Core.VisibilityChangedEventArgs e ) 
  4.       { 
  5.           if (e.Visible) 
  6.           { 
  7.               acc.ReadingChanged += acc_ReadingChanged; 
  8.           } 
  9.           else 
  10.           { 
  11.               acc.ReadingChanged -= acc_ReadingChanged; 
  12.           } 
  13.       } 

當有新的讀數報告時,會發(fā)生ReadingChanged事件,處理該事件,就能獲取到X,Y,Z軸上的讀數。

  1. async void acc_ReadingChanged ( Accelerometer sender, AccelerometerReadingChangedEventArgs args ) 
  2.      { 
  3.          // 將讀數乘以100,以擴大其值,便于比較 
  4.          double x = args.Reading.AccelerationX * 100d; 
  5.          double y = args.Reading.AccelerationY * 100d; 
  6.          double z = args.Reading.AccelerationZ * 100d; 
  7.          System.Diagnostics.Debug.WriteLine("X= {0:N0}, Y= {1:N0}, Z= {2:N0}", x, y, z); 
  8.          await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, 
  9.              async () => 
  10.              { 
  11.                  // 具體取什么數值,可以經過試驗獲得 
  12.                  if (Math.Abs(x) > 145d || Math.Abs(y) > 140d || Math.Abs(z) > 155d) 
  13.                  { 
  14.                      // 顯示靚圖 
  15.                  } 
  16.              }); 
  17.      } 

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

因為用戶“搖一搖”的時候,我們代碼并不關心他向哪個方向甩,反正他是在甩動即可,所以,在判斷的時候可以取x,  y,  z的絕對值,用于判斷的參考數字不是固定的,大家可以自己試,試到合適的數字就可以了。我這里是當X上的值的絕對值大于145(1.45),Y的絕對值大 于140(1.4),Z的絕對值大于155(1.55)時就認為是用戶在搖動手機。

就是這樣,“搖一搖”功能就出來了,然后各位可以在真面上搖幾下(模擬器上很難測),就看到MM了。

 

 本文鏈接:http://www.cnblogs.com/tcjiaan/p/4009105.html

責任編輯:chenqingxiang 來源: cnblogs
相關推薦

2024-01-15 08:21:12

Android應用方式

2012-04-28 14:21:22

HTML5

2015-07-29 15:00:18

iPhone搖一搖

2023-11-14 15:51:38

蘋果系統(tǒng)App

2013-02-20 11:38:13

2015-03-04 11:09:42

微信搖一搖紅包

2014-07-11 14:55:59

傲游瀏覽器

2016-04-21 11:36:08

阿里無線技術營銷

2021-04-29 05:58:20

微信搖一搖抖音

2021-04-24 08:24:28

Windows10操作系統(tǒng)21H2

2015-03-03 09:59:31

微信搖一搖紅包

2015-05-15 15:10:16

紅包

2021-12-15 06:12:55

App

2015-12-29 16:58:03

飛凡

2015-01-22 15:44:55

Android源碼音樂播放器

2015-05-04 16:35:09

互聯網

2018-02-07 08:18:23

微信微信6.6.2刪除好友

2015-12-02 14:36:03

魅族

2011-12-12 14:41:57

2021-06-07 08:07:39

.NETSDK操作
點贊
收藏

51CTO技術棧公眾號