好久沒有寫跟Android相關的東西

心血來潮來寫一下

在ANDROID 1.5之後,settings的選項中多了一個Orientation

04.png

這個選項就是讓G-sensor有所作用的一個功能

它能隨著user的螢幕目前的導向,做出想對應的rotation

當然我們可以從他的code中更仔細的探討(SoundAndDisplaySettings.java -> PhoneWindowManager.java -> WindowOrientationListener.java)

當然這邊我們就不去多說他囉!想知道請自己看過一次code

當然還要對三軸空間有一定的概念

03.JPG

那就讓我們trace一下個人認為比較重要的段落(用G-sensor來rotate screen的演算法)


WindowOrientationListener.java -> onSensorChanged()

01.JPG
(1) gravity     => x+y+z軸的G力,換句話說就是手機目前所承受的G力
(2) zyangle     => 當z與y軸所計算出的角度小於65度或是大於-60度,就是手機並非處於平躺的狀態,就去trigger手機的螢幕旋轉的conditions

02.JPG
(3) angle       => X與Y軸的相對角度,照道理說應該是90度,所以在orientation會修正回來正確螢幕的角度
(4) orientation => orientation就是修正過後的角度,也就是螢幕目前的角度
(5) threshold    => 顧名思義,他就去trigger旋轉螢幕的條件

簡單的來說,這個portrait mode to landscape mode或是landscape to portrait,都是由這些步驟所完成的,不過目前的code來看應該只有支援轉0度(不要轉)與轉90度,其他兩種似乎不支援,若是各位朋友想要自己porting改code的話,可以建議從這一個java code下手,只是建議而已!good luck~


步驟:
Step1. 判斷目前的手機是否平躺,平躺的話就不理會其他值
Step2. 若手機沒有平躺,先算出手機目前轉向的角度
Step3. 看手機目前的角度是否符和trigger的條件
Step4. 若是符合,則適當旋轉手機螢幕來符合使用者的需求
Step5. 做完上述步驟,又會回到Step1

arrow
arrow
    全站熱搜

    owenhuangtw 發表在 痞客邦 留言(5) 人氣()