android屏幕重力感應如何實現,很質量的一個問題

因爲重力感應器在板上安裝的方向不一樣,而移植時須要調整相關的代碼。 html

本人推薦好資料技術網:http://www.baisoujs.com java

解決屏幕顯示顛倒相關問題,相關的有兩部分代碼:
1. 內核重力感應器驅動部分,如 MMA7660
1vi drivers/input/gsensor/mma7660.c
在這個文件中尋找類似如下的代碼
1axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
2axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
3axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
而後按照你本身板的須要,將 X,Y 進行交換,進行相反數運算,將 Z 進行相反運算。
其實能夠作得更方便一些,把這幾個操做寫到 Kconfig 裏面,經過宏來控制這些運算,就不用再改代碼了。
01#ifdef CONFIG_SWAP_XY
02{
03 typeof(x) __tmp;
04 __tmp = x;
05 x = y;
06 y = __tmp;
07}
08#endif
09
10#ifdef CONFIG_REVERSE_X
11 x = -x;
12#endif
13
14#ifdef CONFIG_REVERSE_Y
15 y = -y;
16#endif
17/* X Y 感應方向有問題,這很容易看出來。 */
18#ifdef CONFIG_REVERSE_Z
19 z = -z; /* 按正常狀況下拿着設備,屏幕斜向上,若是不靈敏,把屏幕朝下試試,若是靈敏了,通常是 Z 反了。 */
20#endif
2. Android部分,若是出現菜單顯示正常,可是玩重力感應遊戲時有問題,這部分就要修改(2.1)
1vim frameworks/base/core/java/android/view/WindowOrientationListener.java
1public void onSensorChanged(SensorEvent event) {
2 float[] values = event.values;
3 float X = values[_DATA_X];
4 float Y = values[_DATA_Y];
5 float Z = values[_DATA_Z];
6 float OneEightyOverPi = 57.29577957855f;

7 float gravity = (float) Math.sqrt(X*X+Y*Y+Z*Z); android


本文出自:http://www.baisoujs.com/detail_136988736881557.html vim

相關文章
相關標籤/搜索