欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實(shí)現(xiàn)屏幕旋轉(zhuǎn)方法總結(jié)

 更新時(shí)間:2015年04月23日 14:59:32   作者:Trent  
這篇文章主要介紹了Android實(shí)現(xiàn)屏幕旋轉(zhuǎn)方法,實(shí)例總結(jié)了屏幕旋轉(zhuǎn)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例總結(jié)了Android實(shí)現(xiàn)屏幕旋轉(zhuǎn)方法。分享給大家供大家參考。具體如下:

在介紹之前,我們需要先了解默認(rèn)情況下android屏幕旋轉(zhuǎn)的機(jī)制:

默認(rèn)情況下,當(dāng)用戶手機(jī)的重力感應(yīng)器打開(kāi)后,旋轉(zhuǎn)屏幕方向,會(huì)導(dǎo)致當(dāng)前activity發(fā)生onDestroy-> onCreate,這樣會(huì)重新構(gòu)造當(dāng)前activity和界面布局,如果在Camera界面,則表現(xiàn)為卡頓或者黑屏一段時(shí)間。如果是在橫豎屏UI設(shè)計(jì)方面,那么想很好地支持屏幕旋轉(zhuǎn),則建議在res中建立layout-land和layout-port兩個(gè)文件夾,把橫屏和豎屏的布局文件分別放入對(duì)應(yīng)的layout文件夾中。

了解了這些以后,我們對(duì)android的屏幕旋轉(zhuǎn)方法進(jìn)行如下總結(jié):

1. AndroidManifest.xml設(shè)置

如果單單想設(shè)置橫屏或者豎屏,那么只需要添加橫豎屏代碼:

android:screenOrientation="landscape"橫屏設(shè)置;
android:screenOrientation="portrait"豎屏設(shè)置;

這種方法的優(yōu)點(diǎn):即使屏幕旋轉(zhuǎn),Activity也不會(huì)重新onCreate。

缺點(diǎn):屏幕只有一個(gè)方向。

2. 代碼動(dòng)態(tài)設(shè)置

如果你需要?jiǎng)討B(tài)改變橫豎屏設(shè)置,那么,只需要在代碼中調(diào)用setRequestedOrientation()函數(shù):

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//橫屏設(shè)置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//豎屏設(shè)置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
//默認(rèn)設(shè)置

這種方法優(yōu)點(diǎn):可以隨意動(dòng)態(tài)設(shè)置,滿足我們?nèi)藶楦淖儥M豎屏的要求,同時(shí)滿足橫豎屏UI不同的設(shè)計(jì)需求;

缺點(diǎn):如果改變?cè)O(shè)置,那么,Activity會(huì)被銷(xiāo)毀,重新構(gòu)建,即重新onCreate;

3. 重寫(xiě)onConfigurationChanged

如果你不希望旋轉(zhuǎn)屏幕的時(shí)候Activity被不斷的onCreate(這種情況往往會(huì)造成屏幕切換時(shí)的卡頓),那么,可以使用此方法:

首先,在AndroidMainfest.xml中添加configChanges:

<activity android:name=".Test"
 android:configChanges="orientation|keyboard">
</activity>

注意,keyboardHidden表示鍵盤(pán)輔助功能隱藏,如果你的開(kāi)發(fā)API等級(jí)等于或高于13,還需要設(shè)置screenSize,因?yàn)閟creenSize會(huì)在屏幕旋轉(zhuǎn)時(shí)改變;

android:configChanges="keyboardHidden|orientation|screenSize"

然后,在Activity中重寫(xiě)onConfigurationChanged方法,這個(gè)方法將會(huì)在屏幕旋轉(zhuǎn)變化時(shí),進(jìn)行監(jiān)聽(tīng)處理:

public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);
if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
// Nothing need to be done here 
} else { 
// Nothing need to be done here 
 } 
}

這個(gè)方法的優(yōu)點(diǎn):我們可以隨時(shí)監(jiān)聽(tīng)屏幕旋轉(zhuǎn)變化,并對(duì)應(yīng)做出相應(yīng)的操作;
缺點(diǎn):它只能一次旋轉(zhuǎn)90度,如果一下子旋轉(zhuǎn)180度,onConfigurationChanged函數(shù)不會(huì)被調(diào)用。

4. 結(jié)合OrientationEventListener,自定義旋轉(zhuǎn)監(jiān)聽(tīng)設(shè)置

如果你想更加完美,更加完全的掌控監(jiān)聽(tīng)屏幕旋轉(zhuǎn)變化,比如,轉(zhuǎn)屏?xí)r不想重新onCreate,尤其是在Camera界面,不想出現(xiàn)旋轉(zhuǎn)preview時(shí)屏幕的卡頓、黑屏等問(wèn)題,那么,可以嘗試:
 
首先,創(chuàng)建OrientationEventListener對(duì)象:

private OrientationEventListener mOrientationListener;
// screen orientation listener
private boolean mScreenProtrait = true;
private boolean mCurrentOrient = false;

然后,自定義屏幕變化回調(diào)接口

abstract protected void OrientationChanged(int orientation);
//screen orientation change event

最后,自定義監(jiān)聽(tīng)類(lèi)

private final void startOrientationChangeListener() {
 mOrientationListener = new OrientationEventListener(this) {
 @Override
 public void onOrientationChanged(int rotation) {
 if (((rotation >= 0) && (rotation <= 45)) || (rotation >= 315)||((rotation>=135)&&(rotation<=225))) {//portrait
 mCurrentOrient = true;
 if(mCurrentOrient!=mScreenProtrait)
 {
 mScreenProtrait = mCurrentOrient;
 OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
 Log.d(TAG, "Screen orientation changed from Landscape to Portrait!");
 }
 }
 else if (((rotation > 45) && (rotation < 135))||((rotation>225)&&(rotation<315))) {//landscape
 mCurrentOrient = false;
 if(mCurrentOrient!=mScreenProtrait)
 {
 mScreenProtrait = mCurrentOrient;
 OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
 Log.d(TAG, "Screen orientation changed from Portrait to Landscape!");
 }
 }
 }
 };
 mOrientationListener.enable();
}

在onCreate()中調(diào)用:

startOrientationChangeListener();

這個(gè)方法的優(yōu)點(diǎn):你可以任意隨時(shí)準(zhǔn)確的監(jiān)聽(tīng)屏幕旋轉(zhuǎn)變化的狀態(tài),可以隨時(shí)動(dòng)態(tài)改變橫豎屏狀態(tài);

注:對(duì)于Camera來(lái)說(shuō),你可以設(shè)置初始化為橫屏或者豎屏,然后對(duì)外提供旋轉(zhuǎn)監(jiān)聽(tīng),這樣,既可以獲得屏幕旋轉(zhuǎn)狀態(tài),讓你做出相應(yīng)的操作,又不會(huì)出現(xiàn)重新onCreate當(dāng)前Activity造成的卡頓與短暫的黑屏切換。

希望本文所述對(duì)大家的Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android自定義View繪制貝塞爾曲線實(shí)現(xiàn)流程

    Android自定義View繪制貝塞爾曲線實(shí)現(xiàn)流程

    貝塞爾曲線的本質(zhì)是通過(guò)數(shù)學(xué)計(jì)算的公式來(lái)繪制平滑的曲線,分為一階,二階,三階及多階。但是這里不講數(shù)學(xué)公式和驗(yàn)證,那些偉大的數(shù)學(xué)家已經(jīng)證明過(guò)了,所以就只講講Android開(kāi)發(fā)中的運(yùn)用吧
    2022-11-11
  • Android發(fā)送短信方法總結(jié)

    Android發(fā)送短信方法總結(jié)

    這篇文章主要介紹了Android發(fā)送短信方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android發(fā)送短信的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-11-11
  • Android 使用fast-verification實(shí)現(xiàn)驗(yàn)證碼填寫(xiě)功能的實(shí)例代碼

    Android 使用fast-verification實(shí)現(xiàn)驗(yàn)證碼填寫(xiě)功能的實(shí)例代碼

    這篇文章主要介紹了Android 使用fast-verification實(shí)現(xiàn)驗(yàn)證碼填寫(xiě)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Android緩存機(jī)制——LruCache的詳解

    Android緩存機(jī)制——LruCache的詳解

    這篇文章主要介紹了Android緩存機(jī)制LruCache,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Android加載html中svg格式圖片進(jìn)行顯示

    Android加載html中svg格式圖片進(jìn)行顯示

    這篇文章主要為大家詳細(xì)介紹了Android加載html中svg格式圖片進(jìn)行顯示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Flutter實(shí)現(xiàn)局部刷新

    Flutter實(shí)現(xiàn)局部刷新

    這篇文章主要為大家詳細(xì)介紹了Flutter實(shí)現(xiàn)局部刷新,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Android動(dòng)畫(huà)工具類(lèi)的封裝實(shí)戰(zhàn)記錄

    Android動(dòng)畫(huà)工具類(lèi)的封裝實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于一次Android動(dòng)畫(huà)工具類(lèi)的封裝實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Android統(tǒng)一處理登錄后攜帶數(shù)據(jù)跳轉(zhuǎn)到目標(biāo)頁(yè)面的方式

    Android統(tǒng)一處理登錄后攜帶數(shù)據(jù)跳轉(zhuǎn)到目標(biāo)頁(yè)面的方式

    我們?cè)陂_(kāi)發(fā)的時(shí)候,一定會(huì)遇到頁(yè)面跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于Android統(tǒng)一處理登錄后攜帶數(shù)據(jù)跳轉(zhuǎn)到目標(biāo)頁(yè)面的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Android中的SpannableString與SpannableStringBuilder詳解

    Android中的SpannableString與SpannableStringBuilder詳解

    這篇文章主要給大家介紹了關(guān)于Android中SpannableString與SpannableStringBuilder的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Android ToolBar 修改邊距的實(shí)現(xiàn)方法

    Android ToolBar 修改邊距的實(shí)現(xiàn)方法

    這篇文章主要介紹了Android ToolBar 修改邊距的實(shí)現(xiàn)方法的相關(guān)資料,通過(guò)此文希望能幫助到大家,需要的朋友可以參考下
    2017-08-08

最新評(píng)論