偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

屏幕旋轉(zhuǎn)切換機(jī)制詳解

移動(dòng)開(kāi)發(fā) Android
默認(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í)間。

[[435135]]

前言

屏幕旋轉(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í)間;

今天就介紹下平面旋轉(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.  
  3. android:screenOrientation="landscape" /> 
  4.  
  5. android:name=".test2" 
  6.  
  7. 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.  
  3. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//豎屏設(shè)置 
  4.  
  5. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);//默認(rèn)設(shè)置 

注意點(diǎn):

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

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

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

重寫onConfigurationChanged方法

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

這個(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. //只檢測(cè)是否有四個(gè)角度的改變 
  13. if (orientation > 350 || orientation < 10) { //0度 
  14.     orientation = 0; 
  15. else if (orientation > 80 && orientation < 100) { //90度 
  16.     orientation = 90; 
  17. else if (orientation > 170 && orientation < 190) { //180度 
  18.     orientation = 180; 
  19. else if (orientation > 260 && orientation < 280) { //270度 
  20.     orientation = 270; 
  21. else { 
  22.     return
  23. Log.v(DEBUG_TAG,"Orientation changed to " + orientation); 
  24.             } 
  25.         }; 
  26.        if (mOrientationListener.canDetectOrientation()) { 
  27.            Log.v(DEBUG_TAG, "Can detect orientation"); 
  28.            mOrientationListener.enable(); 
  29.        } else { 
  30.            Log.v(DEBUG_TAG, "Cannot detect orientation"); 
  31.            mOrientationListener.disable(); 
  32.        } 
  33.     } 
  34.     @Override 
  35.     protected void onDestroy() { 
  36.         super.onDestroy(); 
  37.         mOrientationListener.disable(); 
  38.     } 

總結(jié)

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

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

 

責(zé)任編輯:武曉燕 來(lái)源: Android開(kāi)發(fā)編程
相關(guān)推薦

2011-07-07 11:12:57

iPad iPhone

2010-05-25 17:30:36

移動(dòng)IPv6切換

2019-12-26 13:06:07

Windows 10旋轉(zhuǎn)屏幕Windows

2023-11-02 09:42:21

iOS屏幕旋轉(zhuǎn)

2015-09-17 09:42:31

更新Windows RT 微軟

2019-03-29 13:38:51

Windows 10旋轉(zhuǎn)屏幕

2009-07-08 15:01:00

Servlet Ses

2024-07-16 08:38:06

2021-09-06 18:55:57

MySQLCheckpoint機(jī)制

2009-08-06 17:31:46

C#制作屏幕保護(hù)

2010-01-26 18:00:07

Android屏幕元素

2021-12-08 06:53:28

Choreograph屏幕機(jī)制

2009-09-23 16:30:01

Hibernate f

2011-05-26 15:23:34

JavaReflection

2011-03-23 12:58:30

LAMPweb機(jī)制

2011-03-17 09:20:05

異常處理機(jī)制

2010-08-11 09:40:44

LINQ

2011-03-09 09:11:52

java反射機(jī)制

2011-09-27 10:23:24

Java反射機(jī)制

2020-04-24 15:44:50

MySQL數(shù)據(jù)庫(kù)鎖機(jī)制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)