小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android開發(fā)實踐:屏幕旋轉(zhuǎn)的處理

 quasiceo 2015-09-19

Android開發(fā)實踐:屏幕旋轉(zhuǎn)的處理

[日期:2013-09-25] 來源:Linux社區(qū)  作者:ticktick [字體: ]

最近開發(fā)Android Camera相關(guān)的程序,被屏幕旋轉(zhuǎn)搞得頭大,一方面得考慮屏幕旋轉(zhuǎn)后布局的變化,另一方面得搞清楚屏幕的旋轉(zhuǎn)方向、角度與Camera的Preview角度的關(guān)系。本來通過重載Activity的onConfigurationChanged方法,可以檢測到屏幕旋轉(zhuǎn),但發(fā)現(xiàn)有一個問題,它只能檢測水平方向與垂直方向的切換,無法檢測180度的跳轉(zhuǎn)(例如:水平方向突然轉(zhuǎn)180度到水平方向),所以最后不得不換成OrientationEventListener方法來解決問題。在這里分享下經(jīng)驗,并就此順便總結(jié)下Android開發(fā)中屏幕旋轉(zhuǎn)的處理吧。

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

如果沒有針對性地做任何處理的話,默認(rèn)情況下,當(dāng)用戶手機(jī)的重力感應(yīng)器打開后,旋轉(zhuǎn)屏幕方向,會導(dǎo)致app的當(dāng)前activity發(fā)生onDestroy-> onCreate,會重新構(gòu)造當(dāng)前activity和界面布局,很多橫屏/豎屏的布局如果沒有很好的設(shè)計的話,轉(zhuǎn)換為豎屏/橫屏后,會顯示地很難看。

如果想很好地支持屏幕旋轉(zhuǎn),則建議在res中建立layout-land和layout-port兩個文件夾,把橫屏和豎屏的布局文件放入對應(yīng)的layout文件夾中。

2. 如何設(shè)置固定的屏幕方向

在AndroidManifest.xml對應(yīng)的 activity 屬性中,添加:

android:screenOrientation="landscape"  //橫屏
android:screenOrientation="portrait"  //豎屏

那么,默認(rèn)的情況下,應(yīng)用啟動后,會固定為指定的屏幕方向,即使屏幕旋轉(zhuǎn),Activity也不會出現(xiàn)銷毀或者轉(zhuǎn)向等任何反應(yīng)。

3. 強(qiáng)制開啟屏幕旋轉(zhuǎn)效果

如果用戶的手機(jī)沒有開啟重力感應(yīng)器或者在AndroidManifest.xml中設(shè)置了android:screenOrientation,默認(rèn)情況下,該Activity不會響應(yīng)屏幕旋轉(zhuǎn)事件。如果在這種情況下,依然希望Activity能響應(yīng)屏幕旋轉(zhuǎn),則添加如下代碼:

// activity的 onCreate 函數(shù)中
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

4. 屏幕旋轉(zhuǎn)時,不希望activity被銷毀

如果希望捕獲屏幕旋轉(zhuǎn)事件,并且不希望activity 被銷毀,方法如下:

(1)在AndroidManifest.xml對應(yīng)的activity屬性中,添加:

android:configChanges="orientation|screenSize"

(2)在對應(yīng)的activity中,重載函數(shù)onConfigurationChanged

@Override
public voidonConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

在該函數(shù)中可以通過兩種方法檢測當(dāng)前的屏幕狀態(tài):

第一種:

判斷newConfig是否等于Configuration.ORIENTATION_LANDSCAPE,Configuration.ORIENTATION_PORTRAIT

當(dāng)然,這種方法只能判斷屏幕是否為橫屏,或者豎屏,不能獲取具體的旋轉(zhuǎn)角度。

第二種:

調(diào)用this.getWindowManager().getDefaultDisplay().getRotation();

該函數(shù)的返回值,有如下四種:

Surface.ROTATION_0,Surface.ROTATION_90,Surface.ROTATION_180,Surface.ROTATION_270

其中,Surface.ROTATION_0 表示的是手機(jī)豎屏方向向上,后面幾個以此為基準(zhǔn)依次以順時針90度遞增。

(3) 這種方法的Bug

最近發(fā)現(xiàn)這種方法有一個Bug,它只能一次旋轉(zhuǎn)90度,如果你突然一下子旋轉(zhuǎn)180度,onConfigurationChanged函數(shù)不會被調(diào)用。

相關(guān)閱讀

Android屏幕分辨率、密度的正確獲取  http://www./Linux/2013-07/87417.htm

更多Android相關(guān)信息見Android 專題頁面 http://www./topicnews.aspx?tid=11

接下來請看第2頁精彩內(nèi)容http://www./Linux/2013-09/90534p2.htm

linux

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多