最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android編程之重力感應用法分析

 更新時間:2016年10月28日 11:17:15   作者:pku_android  
這篇文章主要介紹了Android編程之重力感應用法,結(jié)合實例形式較為詳細的分析了重力感應的原理、相關概念與實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Android編程之重力感應用法。分享給大家供大家參考,具體如下:

重力感應主要是依靠手機的加速度傳感器(accelerometer)來實現(xiàn)

在Android的開發(fā)中一共有八種傳感器但是不一定每一款真機都支持這些傳感器。因為很多功能用戶根本不care的所以可能開發(fā)商會把某些功能屏蔽掉。還是得根據(jù)真機的實際情況來做開發(fā),下面主要討論加速度傳感器的具體實現(xiàn)方式,傳感器名稱如下:

加速度傳感器(accelerometer)
陀螺儀傳感器(gyroscope)
環(huán)境光照傳感器(light)
磁力傳感器(magnetic field)
方向傳感器(orientation)
壓力傳感器(pressure)
距離傳感器(proximity)
溫度傳感器(temperature)

1.SensorMannager傳感器管理對象

手機中的所有傳感器都須要通過SensorMannager來訪問,調(diào)用getSystemService (SENSOR_SERVICE)方法就可以拿到當前手機的傳感器管理對象。

2.實現(xiàn)SensorEventListener接口

我們需要實現(xiàn)SensorEventListener接口onSensorChanged(SensorEventevent)方法來捕獲手機傳感器的狀態(tài),拿到手機 X軸Y軸Z軸三個方向的重力分量,有了這三個方向的數(shù)據(jù)重力感應的原理我們就已經(jīng)學會了。

public void onSensorChanged(SensorEvent e) {
  float x = e.values[SensorManager.DATA_X];
  float y = e.values[SensorManager.DATA_Y];
  float z = e.values[SensorManager.DATA_Z];
}

如上述代碼所示:float x y z 3個方向的取值范圍是在-10到10之間。下面解釋一下X軸 Y軸 Z軸 重力分量的含義(這里須要注意的是坐標原點:向天空為正數(shù),向地面為負數(shù),剛好與編程時坐標是相反的):

(1)手機屏幕向左側(cè)方,X軸就朝向天空,垂直放置,這時候 Y 軸與Z軸沒有重力分量,因為X軸朝向天空所以它的重力分量則最大。這時候X軸、Y軸、Z軸的重力分量的值分別為(10,0,0);

(2)手機屏幕向右側(cè)方,X軸就朝向地面,垂直放置,這時候 Y 軸與 Z軸沒有重力分量,因為X軸朝向地面所以它的重力分量則最小。這時候X軸、Y軸、Z軸的重力分量的值分別為(-10,0,0);

(3)手機屏幕垂直豎立放置,Y軸就朝向天空,垂直放置,這時候X 軸與Z軸沒有重力分量,因為Y軸朝向天空所以它的重力分量則最大。這時候X軸、Y軸、Z軸的重力分量的值分別為(0,10,0);

(4)手機屏幕垂直豎立放置,Y軸就朝向地面,垂直放置,這時候X 軸與Z軸沒有重力分量,因為Y軸朝向地面所以它的重力分量則最小 。這時候X軸、Y軸、Z軸的重力分量的值分別為(0,-10,0);

(5)手機屏幕向上,Z軸就朝向天空,水平放置,這時候 X 軸與Y軸沒有重力分量,因為Z軸朝向天空所以它的重力分量則最大。這時候X軸、Y軸、Z軸的重力分量的值分別為(0,0,10);

(6)手機屏幕向上,Z軸就朝向地面,水平放置,這時候 X 軸與Y軸沒有重力分量,因為Z軸朝向地面所以它的重力分量則最小。這時候X軸、Y軸、Z軸的重力分量的值分別為(0,0,-10)。

3.注冊SensorEventListener

使用SensorMannager調(diào)用getDefaultSensor(Sensor.TYPE_ACCELEROMETER)方法拿到加速重力感應的Sensor對象。因為我討論的是重力加速度傳感器所以參數(shù)為Sensor.TYPE_ACCELEROMETER,如果需要拿到其它的傳感器需要傳入對應的名稱。使用SensorMannager調(diào)用registerListener()方法來注冊,第三個參數(shù)是檢測的靈敏精確度,根據(jù)不同的需求來選擇精準度,游戲開發(fā)建議使用  SensorManagerSENSOR_DELAY_ GAME。

4 .重力感應簡單速度計算的方式

每次搖晃手機計算出 X軸 Y軸 Z軸的重力分量可以將它們記錄下來 然后每次搖晃的重力分量和之前的重力分量可以做一個對比,利用差值和時間就可以計算出他們的移動速度。

重力感應裝置包括感應器、處理器和控制器三個部分。感應器負責偵測存儲器的狀態(tài),計算存儲器的重力加速度值;處理器則對加速度值是否超出安全范圍進行判斷;而控制器則負責控制將磁頭鎖定或者釋放出安全停泊區(qū)。一旦感應器偵測并經(jīng)處理器判斷當前的重力加速度超過安全值之后,控制器就會通過硬件控制磁頭停止讀寫工作,并快速歸位,鎖定在專有的磁頭停泊區(qū)。這一系列動作會在200毫秒內(nèi)完成。當感應裝置探測到加速度值恢復到正常值范圍之后,產(chǎn)品才會恢復工作。

Android多媒體框架的代碼在以下目錄中:external/opencore/.這個目錄是Android多媒體框架的根目錄,其中包含的子目錄如下所示:

* android:這里面是一個上層的庫,它基于PVPlayer和PVAuthor的SDK實現(xiàn)了一個為Android使用的Player和Author
* baselibs:包含數(shù)據(jù)結(jié)構和線程安全等內(nèi)容的底層庫
* codecs_v2:這是一個內(nèi)容較多的庫,主要包含編解碼的實現(xiàn),以及一個OpenMAX的實現(xiàn)
* engines:包含PVPlayer和PVAuthor引擎的實現(xiàn)
*extern_libs_v2:包含了khronos的OpenMAX的頭文件
*fileformats:文件格式的據(jù)具體解析(parser)類
* nodes:編解碼和文件解析的各個node類
* oscl:操作系統(tǒng)兼容庫
* pvmi: 輸入輸出控制的抽象接口
* protocols:主要是與網(wǎng)絡相關的RTSP、RTP、HTTP等協(xié)議的相關內(nèi)容
* pvcommon:pvcommon庫文件的Android.mk文件,沒有源文件
*pvplayer:pvplayer庫文件的Android.mk文件,沒有源文件
* pvauthor:pvauthor庫文件的Android.mk文件,沒有源文件
* tools_v2:編譯工具以及一些可注冊的模塊

以下是部分測試代碼:

private SensorManager sensorMgr;
Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//保存上一次 x y z 的坐標
float bx = 0;
float by = 0;
float bz = 0;
long btime = 0;//這一次的時間
sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
SensorEventListener lsn = new SensorEventListener() {
  public void onSensorChanged(SensorEvent e) {
    float x = e.values[SensorManager.DATA_X];
    float y = e.values[SensorManager.DATA_Y];
    float z = e.values[SensorManager.DATA_Z];
    //計算出 X Y Z的數(shù)值下面可以根據(jù)這個數(shù)值來計算搖晃的速度了
    //速度 = 路程/時間
    //X軸的速度
    float speadX = (x - bx) / (System.currentTimeMillis() - btime);
    //y軸的速度
    float speadY = (y - by) / (System.currentTimeMillis() - btime);
    //z軸的速度
    float speadZ = (z - bz) / (System.currentTimeMillis() - btime);
    //這樣簡單的速度就可以計算出來,如果你想計算加速度也可以,在運動學里,加速度a與速度,
    //位移都有關系:Vt=V0+at,S=V0*t+1/2at^2, S=(Vt^2-V0^2)/(2a),根據(jù)這些信息也可以求解a
    bx = x;
    by = y;
    bz = z;
    btime = System.currentTimeMillis();
  }
  public void onAccuracyChanged(Sensor s, int accuracy) {
  }
};
// 注冊listener,第三個參數(shù)是檢測的精確度
sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);

更多關于Android相關內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)

希望本文所述對大家Android程序設計有所幫助。

相關文章

  • Kotlin 嵌套函數(shù)開發(fā)技巧詳解

    Kotlin 嵌套函數(shù)開發(fā)技巧詳解

    這篇文章主要為大家介紹了Kotlin 嵌套函數(shù)開發(fā)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Android中刪除Preference詳解

    Android中刪除Preference詳解

    這篇文章主要介紹了Android中刪除Preference詳解,很多時候刪除Preference總會失敗,本文著重分析刪除失敗的原因,需要的朋友可以參考下
    2015-01-01
  • Android仿簡書搜索框效果的示例代碼

    Android仿簡書搜索框效果的示例代碼

    本篇文章主要介紹了Android仿簡書搜索框效果的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Android運動健康睡眠自定義控件的實現(xiàn)

    Android運動健康睡眠自定義控件的實現(xiàn)

    這篇文章主要介紹了Android實現(xiàn)運動健康睡眠自定義控件的方法,幫助大家更好的理解和學習使用Android開發(fā),感興趣的朋友可以了解下
    2021-03-03
  • 關于OkHttp中response.body().string()的用法解析

    關于OkHttp中response.body().string()的用法解析

    這篇文章主要介紹了關于OkHttp中response.body().string()的用法解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • android實現(xiàn)簡單進度條ProgressBar效果

    android實現(xiàn)簡單進度條ProgressBar效果

    這篇文章主要為大家詳細介紹了android實現(xiàn)簡單進度條ProgressBar效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • android屏幕圓角實現(xiàn)方法的示例代碼

    android屏幕圓角實現(xiàn)方法的示例代碼

    本篇文章主要介紹了android屏幕圓角實現(xiàn)方法的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Android如何使用RecyclerView打造首頁輪播圖

    Android如何使用RecyclerView打造首頁輪播圖

    這篇文章主要為大家詳細介紹了Android如何使用RecyclerView打造首頁輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android編程中context及全局變量實例詳解

    Android編程中context及全局變量實例詳解

    這篇文章主要介紹了Android編程中context及全局變量的用法,結(jié)合實例形式較為詳細的分析講述了context及全局變量的使用技巧與相關注意事項,需要的朋友可以參考下
    2015-12-12
  • Android ConstraintLayout約束布局使用實例介紹

    Android ConstraintLayout約束布局使用實例介紹

    ConstraintLayout是Google在Google I/O 2016大會上發(fā)布的一種新的布局容器(ViewGroup),它支持以靈活的方式來放置子控件和調(diào)整子控件的大小,下面這篇文章主要給大家介紹了關于Android中ConstraintLayout約束布局詳細解析的相關資料,需要的朋友可以參考下
    2022-10-10

最新評論

唐山市| 江华| 天门市| 集贤县| 加查县| 嫩江县| 丹巴县| 仁寿县| 鹿邑县| 山东省| 蓝山县| 长汀县| 滨州市| 龙南县| 澄城县| 浦北县| 芦溪县| 镇平县| 江阴市| 宁国市| 海门市| 综艺| 榆中县| 亚东县| 云龙县| 辰溪县| 寿阳县| 铜梁县| 虹口区| 扎囊县| 定远县| 裕民县| 宿州市| 思茅市| 金坛市| 犍为县| 神池县| 樟树市| 德钦县| 阳高县| 芒康县|