Android旋轉螢幕研究

來源:互聯網
上載者:User

http://wenku.baidu.com/view/14783db665ce050876321307.html

android2.2怎麼根據重力感應來改變布局呢,我們來詳細分析一下WindowOrientationListener.java這個檔案

這個檔案裡有個重要的概念和兩個重要的數組,對於我們理解翻轉手機帶來螢幕布局變化有很大協助

一個概念:布局方式

在android2.2官方系統中有三種布局方式,分別叫做ROTATION_0, ROTATION_90, ROTATION_270,不要把後面的0,90,270與後面我們即將提到的角度值混淆,這裡的0,90,270就是個名稱,跟A,B,C沒什麼區別,只是告訴我們這是一種布局方式,本段的核心就是研究在什麼情況下採用哪一種布局方式。

兩個數組:THRESHOLDS, ROTATE_TO

              先看兩個數組的定義

Private final int[][][] THRESHOLDS = newint[][][] {

       {{60,180}, {180, 300}},

       {{0,45}, {45, 165}, {330, 360}},

       {{0,30}, {195, 315}, {315, 360}}

}

 

Private final int[][] ORTATE_TO = newint[][] {

       {ROTATION_270,ROTATION_90},

       {ROTATION_0,ROATION_270, ROATION_0},

       {ROATION_0,ROTATION_90, ROATION_0}

}

 

THRESHOLDS的基本元素是數值,實際上是代表角度,0~360正好代表一個圓周;

ROTATE_TO的基本元素是布局方式。

 

這兩個數組正好組成一個映射關係如下:

布局

遇到角度

遇到角度

遇到角度

轉化成另外的布局

轉化成另外的布局

轉化成另外的布局

 

 

 

 

ROTATION_0

60-180

180-300

 

ROTATION_270

ROTATION_90

 

 

 

 

 

ROTATION_90

0-45

45-165

330-360

ROTATION_0

ROTATION_270

ROTATION_0

 

 

 

 

ROTATION_270

0-30

195-315

315-360

ROTATION_0

ROTATION_90

ROTATION_0

 

我們從角度開始研究

 

Android系統中,手機的角度如所示

 

當手機的speaker在上方(天空的方向)時,手機所在角度為0°,朝右為90°,朝下為180°,朝左為270°。

 

手機為0°,是我們常用的方向,對應的布局為ROTATION_0,根據映射關係發現:

當角度在60-180之間時,轉變布局為ROTATION_270;

轉過180到了180-300之間時,改變布局為ROATION_90;

如果是在300-360,0-60之間,則不做改變。

 

可以發現,三種布局把整個圓周三分天下,每個布局佔據120度,300-360和0-60這個區間內為布局ROTATION_0,60-180這個區間為布局ROTATION_270,180-300這個區間的布局為ROTATION_90。 有了這個基本的認識,再看映射表的其餘部分就簡單多了

 

手機在270度方向時,對應的布局為ROTATION_90,根據映射關係:

當角度變為0-45和330-360的時候,改變布局為ROTATION_0;

當角度變為45-165的時候,改變布局為ROTATION_270;

當角度在165-330這個區間,則布局不變。

 

手機在90度方向時,對應的布局為ROTATION_270,根據映射關係:

當角度變為0-30和315-360的時候,改變布局為ROTATION_0;

當角度變為195-315的時候,改變布局為ROTATION_90;

當角度在30-195這個區間,則布局不變。

 

 

有興趣的開發人員可以把後兩種轉換情況的圖形也畫出來。根據這幾個數值,可以謹慎推斷android這麼做的思路:

當正常拿著手機的時候,即布局為ROTATION_0時,會根據等分的120度來判斷改變成哪個布局;

當橫著拿手機,即布局為ROTATION_90或者ROTATION_270時,布局改變的條件就要苛刻一些,改回ROTATION_0的條件尤其苛刻(角度範圍跨度只有75度)。

 

有了上面的認識,我們想把布局縮減為2種或者增加為4種就可以方便的改變數組來實現。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.