原文章:螢幕旋轉角度的處理,文章說得好棒!
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 把拍速看 體力學鏈末端球拍水平旋轉的線速度,且線速度可換算出相應角速度,與身體各部...