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

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

新聞中心

這里有您想知道的互聯網營銷解決方案
屏幕旋轉切換機制詳解

前言

屏幕旋轉的機制;

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

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

今天就介紹下平面旋轉方面的知識點;

一、screenOrientation屬性說明

android:screenOrientation屬性說明:

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

二、屏幕旋轉詳解

1、配置文件設置

AndroidManifest.xml設置;

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

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

2、代碼設置

調用setRequestedOrientation()函數,其效果就是和在

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)聽屏幕旋轉變化

重寫onConfigurationChanged方法

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

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

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

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

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

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

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

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

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

MyOrientationDetector類的onOrientationChanged 參數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ā)私信給我,或許可以給你點幫助建議;

我們一起努力進步;


網頁標題:屏幕旋轉切換機制詳解
路徑分享:http://www.5511xx.com/article/dpgodhe.html