日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
屏幕旋轉(zhuǎn)切換機(jī)制詳解

前言

屏幕旋轉(zhuǎn)的機(jī)制;

創(chuàng)新互聯(lián)建站長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為貴溪企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè),貴溪網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

默認(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í)間;

今天就介紹下平面旋轉(zhuǎn)方面的知識(shí)點(diǎn);

一、screenOrientation屬性說(shuō)明

android:screenOrientation屬性說(shuō)明:

  • unspecified,默認(rèn)值,由系統(tǒng)決定,不同手機(jī)可能不一致
  • landscape,強(qiáng)制橫屏顯示,只有一個(gè)方向
  • portrait,強(qiáng)制豎屏顯,只有一個(gè)方向
  • behind,與前一個(gè)activity方向相同
  • sensor,根據(jù)物理傳感器方向轉(zhuǎn)動(dòng),用戶90度、180度、270度旋轉(zhuǎn)手機(jī)方向,activity都更著變化,會(huì)重啟activity(無(wú)論系統(tǒng)是否設(shè)置為自動(dòng)轉(zhuǎn)屏,activity頁(yè)面都會(huì)跟隨傳感器而轉(zhuǎn)屏)
  • sensorLandscape,橫屏旋轉(zhuǎn),就是可以上下旋轉(zhuǎn),有兩個(gè)方向,不會(huì)重啟activity
  • sensorPortrait,豎屏旋轉(zhuǎn),就是可以上下旋轉(zhuǎn),有兩個(gè)方向,不會(huì)重啟activity
  • nosensor,旋轉(zhuǎn)設(shè)備時(shí)候,界面不會(huì)跟著旋轉(zhuǎn)。初始化界面方向由系統(tǒng)控制(無(wú)論系統(tǒng)是否設(shè)置為自動(dòng)轉(zhuǎn)屏,activity頁(yè)面都不會(huì)轉(zhuǎn)屏)
  • user,用戶當(dāng)前設(shè)置的方向
  • reverseLandscape,與正常的橫向方向相反顯示(反向橫屏)
  • reversePortrait,與正常的縱向方向相反顯示(反向豎屏)(我設(shè)置沒(méi)用)

二、屏幕旋轉(zhuǎn)詳解

1、配置文件設(shè)置

AndroidManifest.xml設(shè)置;

  
 
 
  1. android:name=".test1"
  2. android:screenOrientation="landscape" />
  3. android:name=".test2"
  4. android:screenOrientation="portrait" />

橫屏或者豎屏是被直接定死,旋轉(zhuǎn)方向不會(huì)變化,只有一個(gè)方向(意思是旋轉(zhuǎn)180°也不會(huì)改變),當(dāng)然就不會(huì)在手機(jī)旋轉(zhuǎn)的時(shí)候重啟activity;

2、代碼設(shè)置

調(diào)用setRequestedOrientation()函數(shù),其效果就是和在

AndroidManifest中設(shè)置一樣的,當(dāng)前方向和設(shè)置的方向不一致的時(shí)候,會(huì)重啟activity,一致的話不會(huì)重啟;

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

注意點(diǎn):

不想activity被重啟,可以在AndroidManifest中加上android:configChanges(orientation|screenSize這兩個(gè)一定要加上)

  
 
 
  1.             android:name=".MainActivity"
  2.             android:screenOrientation="sensor"
  3.             android:configChanges="keyboardHidden|orientation|screenSize">

3、監(jiān)聽(tīng)屏幕旋轉(zhuǎn)變化

重寫(xiě)onConfigurationChanged方法

  
 
 
  1. @Override
  2. public void onConfigurationChanged(Configuration newConfig) {
  3. super.onConfigurationChanged(newConfig);
  4. Log.d(TAG, "onConfigurationChanged");
  5. }

這個(gè)方法將會(huì)在屏幕旋轉(zhuǎn)變化時(shí)調(diào)用,可以在這里做出我們?cè)谄聊蛔兓瘯r(shí)想要的操作,并且不會(huì)重啟activity。但它只能一次旋轉(zhuǎn)90度,如果一下子旋轉(zhuǎn)180度,onConfigurationChanged函數(shù)不會(huì)被調(diào)用;

4、自定義旋轉(zhuǎn)監(jiān)聽(tīng)設(shè)置

想更加完美,更加完全的掌控監(jiān)聽(tīng)屏幕旋轉(zhuǎn)變化,就的自定義旋轉(zhuǎn)監(jiān)聽(tīng)

(1)創(chuàng)建一個(gè)類繼承OrientationEventListener

(2)開(kāi)啟和關(guān)閉監(jiān)聽(tīng)

可以在 activity 中創(chuàng)建MyOrientationDetector 類的對(duì)象,注意,監(jiān)聽(tīng)的開(kāi)啟的關(guān)閉,是由該類的父類的 enable() 和 disable() 方法實(shí)現(xiàn)的;

因此,可以在activity的 onResume() 中調(diào)用MyOrientationDetector 對(duì)象的 enable方法,在 onPause() 中調(diào)用MyOrientationDetector 對(duì)象的 disable方法來(lái)完車功能;

(3)監(jiān)測(cè)指定的屏幕旋轉(zhuǎn)角度

MyOrientationDetector類的onOrientationChanged 參數(shù)orientation是一個(gè)從0~359的變量,如果只希望處理四個(gè)方向,加一個(gè)判斷即可:

  
 
 
  1. OrientationEventListener mOrientationListener;
  2.     @Override
  3.     public void onCreate(Bundle savedInstanceState) {
  4.         super.onCreate(savedInstanceState);
  5.         setContentView(R.layout.main);
  6.         mOrientationListener = new OrientationEventListener(this,
  7.             SensorManager.SENSOR_DELAY_NORMAL) {
  8.             @Override
  9.             public void onOrientationChanged(int orientation) {
  10.             if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
  11.     return;  //手機(jī)平放時(shí),檢測(cè)不到有效的角度
  12. }
  13. //只檢測(cè)是否有四個(gè)角度的改變
  14. if (orientation > 350 || orientation < 10) { //0度
  15.     orientation = 0;
  16. } else if (orientation > 80 && orientation < 100) { //90度
  17.     orientation = 90;
  18. } else if (orientation > 170 && orientation < 190) { //180度
  19.     orientation = 180;
  20. } else if (orientation > 260 && orientation < 280) { //270度
  21.     orientation = 270;
  22. } else {
  23.     return;
  24. }
  25. Log.v(DEBUG_TAG,"Orientation changed to " + orientation);
  26.             }
  27.         };
  28.        if (mOrientationListener.canDetectOrientation()) {
  29.            Log.v(DEBUG_TAG, "Can detect orientation");
  30.            mOrientationListener.enable();
  31.        } else {
  32.            Log.v(DEBUG_TAG, "Cannot detect orientation");
  33.            mOrientationListener.disable();
  34.        }
  35.     }
  36.     @Override
  37.     protected void onDestroy() {
  38.         super.onDestroy();
  39.         mOrientationListener.disable();
  40.     }

總結(jié)

快年底了,很多人都要找工作或者寫(xiě)畢業(yè)設(shè)計(jì),有不懂就發(fā)私信給我,或許可以給你點(diǎn)幫助建議;

我們一起努力進(jìn)步;


文章名稱:屏幕旋轉(zhuǎn)切換機(jī)制詳解
URL地址:http://m.5511xx.com/article/dpgodhe.html