螢幕旋轉角度的處理

2021-07-09 12:58:37 字數 3861 閱讀 4094

原文章:螢幕旋轉角度的處理,文章說得好棒!

android開發實踐:螢幕旋轉的處理

2013-09-24 20:40:10

標籤:開發

android

旋轉orientation

、作者資訊和本宣告。否則將追究法律責任。

正文 begin

最近開發android camera相關的程式,被螢幕旋轉搞得頭大,一方面得考慮螢幕旋轉後布局的變化,另一方面得搞清楚螢幕的旋轉方向、角度與camera的preview角度的關係。本來通過過載activity的onconfigurationchanged方法,可以檢測到螢幕旋轉,但發現有乙個問題,它只能檢測水平方向與垂直方向的切換,無法檢測180度的跳轉(例如:水平方向突然轉180度到水平方向),所以最後不得不換成orientationeventlistener方法來解決問題。在這裡分享下經驗,並就此順便總結下android開發中螢幕旋轉的處理吧。

1. 不做任何處理的情況下

如果想很好地支援螢幕旋轉,則建議在res中建立layout-land和layout-port兩個資料夾,把橫屏和豎屏的布局檔案放入對應的layout資料夾中。

2. 如何設定固定的螢幕方向

在androidmanifest.xml對應的 activity 屬性中,新增: 1

2 android:screenorientation=

"landscape"

//橫屏

android:screenorientation=

"portrait"

//豎屏

那麼,預設的情況下,應用啟動後,會固定為指定的螢幕方向,即使螢幕旋轉,activity也不會出現銷毀或者轉向等任何反應。

3. 強制開啟螢幕旋轉效果

如果使用者的手機沒有開啟重力感應器或者在androidmanifest.xml中設定了android:screenorientation,預設情況下,該activity不會響應螢幕旋轉事件。如果在這種情況下,依然希望activity能響應螢幕旋轉,則新增如下**: 1

2 // activity的 oncreate 函式中

this.setrequestedorientation(activityinfo.screen_orientation_full_sensor);

4. 螢幕旋轉時,不希望activity被銷毀

如果希望捕獲螢幕旋轉事件,並且不希望activity 被銷毀,方法如下:

(1)在androidmanifest.xml對應的activity屬性中,新增: 1

android:configchanges=

"orientation|screensize"

(2)在對應的activity中,過載函式onconfigurationchanged 1

2 3 4

@override

public

voidonconfigurationchanged(configuration newconfig) 

在該函式中可以通過兩種方法檢測當前的螢幕狀態:

第一種:

判斷newconfig是否等於configuration.orientation_landscape,configuration.orientation_portrait

當然,這種方法只能判斷螢幕是否為橫屏,或者豎屏,不能獲取具體的旋轉角度。

第二種:

呼叫this.getwindowmanager().getdefaultdisplay().getrotation();

該函式的返回值,有如下四種:

su***ce.rotation_0,su***ce.rotation_90,su***ce.rotation_180,su***ce.rotation_270

其中,su***ce.rotation_0 表示的是手機豎屏方向向上,後面幾個以此為基準依次以順時針90度遞增。

(3) 這種方法的bug

最近發現這種方法有乙個bug,它只能一次旋轉90度,如果你突然一下子旋轉180度,onconfigurationchanged函式不會被呼叫。

5. 實時判斷螢幕旋轉的每乙個角度

上面說的各種螢幕旋轉角度的判斷至多只能判斷 0,90,180,270 四個角度,如果希望實時獲取每乙個角度的變化,則可以通過orientationeventlistener 來實現。

使用方法:

(1)建立乙個類繼承orientationeventlistener1 2

3 45 6

7 8 9

public

class

myorientationdetector 

extends

orientationeventlistener

@override

public

void

onorientationchanged(

int

orientation)  }

(2)開啟和關閉監聽

可以在 activity 中建立myorientationdetector 類的物件,注意,監聽的開啟的關閉,是由該類的父類的 enable() 和 disable() 方法實現的。

因此,可以在activity的 onresume() 中呼叫myorientationdetector 物件的 enable方法,在 onpause() 中呼叫myorientationdetector 物件的 disable方法來完車功能。

(3)監測指定的螢幕旋轉角度

myorientationdetector類的onorientationchanged 引數orientation是乙個從0~359的變數,如果只希望處理四個方向,加乙個判斷即可: 1

2 34 5

6 78 9

10 11

12 13

14 15

16 17

18 19

20 if(orientation == orientationeventlistener.orientation_unknown) 

//只檢測是否有四個角度的改變

if( orientation > 

350|| orientation< 

10)    

else

if( orientation > 

80&&orientation < 

100) 

else

if( orientation > 

170&&orientation < 

190) 

else

if( orientation > 

260&&orientation < 

280) 

else

log.i(

"myorientationdetector "

,"onorientationchanged:"

+orientation);

獲取最新的文章和資訊。

設定文字旋轉角度

如果需要將報表單元格內的文字在展現時實現旋轉效果,我們可以設定單元格資料型別為html來解決。下面我們就來具體看乙個簡單的例子。第一步,設計報表如下 其中b2 b3 b4 b5為html型別。b2 潤幹報表 b3 潤幹報表 b4 潤幹報表 b5 潤幹報表 其中,潤幹報表 中rotation的值可以為...

core animation使用旋轉角度,搖擺效果

今天看某位同學問時鐘效果怎麼做,我首先想到的就是view的屬性transform裡面有旋轉角度的方法,當然還有其他的方法,只是我感覺這個最簡單 尷尬 有兩種方式,乙個是定時器控制動畫,乙個是利用core animation的重複動畫屬性 void animation completion bool ...

旋轉角度 打桌球時身體各部位旋轉角度三維動畫

打桌球時身體各部位旋轉角度三維動畫 拙帖 角度辨力法 的思路原理 提出了一種用身體水平扭轉角度來推斷正手拉弧圈時,各肢體發力對擊球力貢獻相對份額的假設,簡稱 角度辯力法 該法總體思路是 1 擊球力大小來自球拍速度。2 把拍速看 體力學鏈末端球拍水平旋轉的線速度,且線速度可換算出相應角速度,與身體各部...