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

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

新聞中心

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

前言

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

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

默認情況下,當用戶手機的重力感應器打開后,旋轉(zhuǎn)屏幕方向,會導致當前activity發(fā)生onDestroy-> onCreate,這樣會重新構造當前activity和界面布局,如果在Camera界面,則表現(xiàn)為卡頓或者黑屏一段時間;

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

一、screenOrientation屬性說明

android:screenOrientation屬性說明:

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

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

1、配置文件設置

AndroidManifest.xml設置;

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

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

2、代碼設置

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

AndroidManifest中設置一樣的,當前方向和設置的方向不一致的時候,會重啟activity,一致的話不會重啟;

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

注意點:

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

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

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

重寫onConfigurationChanged方法

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

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

4、自定義旋轉(zhuǎn)監(jiān)聽設置

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

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

(2)開啟和關閉監(jiān)聽

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

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

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

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

  
 
 
  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;  //手機平放時,檢測不到有效的角度
  12. }
  13. //只檢測是否有四個角度的改變
  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.     }

總結

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

我們一起努力進步;


網(wǎng)站欄目:屏幕旋轉(zhuǎn)切換機制詳解
URL分享:http://m.5511xx.com/article/dpgodhe.html