屏幕旋转的机制;
创新互联建站长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为贵溪企业提供专业的成都网站设计、网站制作、外贸营销网站建设,贵溪网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。
默认情况下,当用户手机的重力感应器打开后,旋转屏幕方向,会导致当前activity发生onDestroy-> onCreate,这样会重新构造当前activity和界面布局,如果在Camera界面,则表现为卡顿或者黑屏一段时间;
今天就介绍下平面旋转方面的知识点;
android:screenOrientation属性说明:
1、配置文件设置
AndroidManifest.xml设置;
- android:name=".test1"
- android:screenOrientation="landscape" />
- android:name=".test2"
- android:screenOrientation="portrait" />
横屏或者竖屏是被直接定死,旋转方向不会变化,只有一个方向(意思是旋转180°也不会改变),当然就不会在手机旋转的时候重启activity;
2、代码设置
调用setRequestedOrientation()函数,其效果就是和在
AndroidManifest中设置一样的,当前方向和设置的方向不一致的时候,会重启activity,一致的话不会重启;
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横屏设置
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏设置
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);//默认设置
注意点:
不想activity被重启,可以在AndroidManifest中加上android:configChanges(orientation|screenSize这两个一定要加上)
- android:name=".MainActivity"
- android:screenOrientation="sensor"
- android:configChanges="keyboardHidden|orientation|screenSize">
3、监听屏幕旋转变化
重写onConfigurationChanged方法
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- Log.d(TAG, "onConfigurationChanged");
- }
这个方法将会在屏幕旋转变化时调用,可以在这里做出我们在屏幕变化时想要的操作,并且不会重启activity。但它只能一次旋转90度,如果一下子旋转180度,onConfigurationChanged函数不会被调用;
4、自定义旋转监听设置
想更加完美,更加完全的掌控监听屏幕旋转变化,就的自定义旋转监听
(1)创建一个类继承OrientationEventListener
(2)开启和关闭监听
可以在 activity 中创建MyOrientationDetector 类的对象,注意,监听的开启的关闭,是由该类的父类的 enable() 和 disable() 方法实现的;
因此,可以在activity的 onResume() 中调用MyOrientationDetector 对象的 enable方法,在 onPause() 中调用MyOrientationDetector 对象的 disable方法来完车功能;
(3)监测指定的屏幕旋转角度
MyOrientationDetector类的onOrientationChanged 参数orientation是一个从0~359的变量,如果只希望处理四个方向,加一个判断即可:
- OrientationEventListener mOrientationListener;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mOrientationListener = new OrientationEventListener(this,
- SensorManager.SENSOR_DELAY_NORMAL) {
- @Override
- public void onOrientationChanged(int orientation) {
- if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
- return; //手机平放时,检测不到有效的角度
- }
- //只检测是否有四个角度的改变
- if (orientation > 350 || orientation < 10) { //0度
- orientation = 0;
- } else if (orientation > 80 && orientation < 100) { //90度
- orientation = 90;
- } else if (orientation > 170 && orientation < 190) { //180度
- orientation = 180;
- } else if (orientation > 260 && orientation < 280) { //270度
- orientation = 270;
- } else {
- return;
- }
- Log.v(DEBUG_TAG,"Orientation changed to " + orientation);
- }
- };
- if (mOrientationListener.canDetectOrientation()) {
- Log.v(DEBUG_TAG, "Can detect orientation");
- mOrientationListener.enable();
- } else {
- Log.v(DEBUG_TAG, "Cannot detect orientation");
- mOrientationListener.disable();
- }
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mOrientationListener.disable();
- }
总结
快年底了,很多人都要找工作或者写毕业设计,有不懂就发私信给我,或许可以给你点帮助建议;
我们一起努力进步;
当前标题:屏幕旋转切换机制详解
标题来源:http://www.shufengxianlan.com/qtweb/news20/47370.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联