这次分享一个实现屏幕只能在竖直方向上旋转的功能,开发相机的童鞋应该都会遇到屏幕旋转的问题,一般都是横竖屏的切换,布局变换,生命周期问题啥的,这些网上一搜一大堆的解决方案,什么监听onConfigurationChanged()方法然后判断当前属于横屏还是竖屏然后切换布局啥的,生命周期是在对应的Activity声明的时候添加android:configChanges="orientation|keyboardHidden|screenSize"。不过在网上看到一篇对横竖屏解析很好的文章分享出来https://blog.csdn.net/u010005281/article/details/79531474。这次遇到的需求是不经过横屏直接倒转屏幕的操作。从这篇博客中看到了SCREEN_ORIENTATION_SENSOR_PORTRAIT方法,亲测在手机端不适用,在pad端可以。在手机端可以实现始终横屏旋转的方法。开始我的表演

根据产品的需求来做,我这边的需求是对所有的界面都实现始终竖屏切换,这就需要我们定义一个BaseActivity类,然后以后的Activity都继承于BaseActivity。OrientationEventListener可以实时的获取到手机旋转的角度,然后根据这个旋转的角度判断是横屏还是竖屏,再根据角度的范围判断是偏向于竖屏的正向还是倒向。是不是超简单。我代码中的方法startOrientation()方法主要是来判断用户有没有开启  “自动旋转的开关的方法” ,如果用户没有开启自动旋转的开关就不进行屏幕旋转的判断,开启以后在监听并旋转。我在这里又写了一遍onConfigurationChanged()方法并在里面调用了开启监听的方法主要是为了解决在App界面中下拉后开启开关后的旋转问题,好了,结束。整代码如下:

import android.content.pm.ActivityInfo
import android.content.res.Configuration
import android.hardware.SensorManager
import android.os.Bundle
import android.provider.Settings
import android.support.v4.app.FragmentActivity
import android.view.OrientationEventListenerclass BaseActivity: FragmentActivity() {private lateinit var orientationEventListener: OrientationEventListeneroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)//实时监听屏幕的旋转orientationEventListener=object : OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL){override fun onOrientationChanged(orientation: Int) {requestedOrientation = if((orientation in 270..360)||(orientation in 0..90)){ActivityInfo.SCREEN_ORIENTATION_PORTRAIT}else if((orientation in 90..180)||(orientation in 180..270)){ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT}else{ActivityInfo.SCREEN_ORIENTATION_PORTRAIT}}}}override fun onResume() {super.onResume()startOrientation()}override fun onPause() {super.onPause()orientationEventListener.disable()}override fun onConfigurationChanged(newConfig: Configuration?) {super.onConfigurationChanged(newConfig)//解决屏幕下拉后开启屏幕旋转开关的问题startOrientation()}private fun startOrientation(){if(Settings.System.getInt(contentResolver, Settings.System.ACCELEROMETER_ROTATION)==0){orientationEventListener.disable()}else {orientationEventListener.enable()}}}

Android屏幕旋转180°的实现相关推荐

  1. android 屏幕旋转180度

    //横屏正方向if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {setRequestedOrien ...

  2. Android屏幕旋转,赶紧学习一下

    ActivityInfo.SCREEN_ORIENTATION_SENSOR //根据传感器设置方向 ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR //根据传 ...

  3. Android屏幕旋转,android实战项目实例

    ActivityInfo.SCREEN_ORIENTATION_FULL_USER //根据用户选择旋转方向,可以让屏幕旋转180度,和传感器那个很像 sensor 由物理感应器决定显示方向,它取决于 ...

  4. Android屏幕旋转

    背景知识 最近在做一个项目,客户有旋转屏幕的需求,我查阅了很多资料,最后实现了屏幕的反转,下面我将总结一下实现方法. 效果展示 代码实现 portrait 竖屏 ActivityInfo.SCREEN ...

  5. Android屏幕旋转时Activity不重新调用onCreate的方法

    2019独角兽企业重金招聘Python工程师标准>>> android屏幕旋转时Activity不重新调用onCreate的方法 当手机转屏时,Activity的onDestroy和 ...

  6. android 屏幕旋转

    基本思路:在输入事件分发线程中(代码在WindowManagerService.java中),当事件为按键事件而且按键码与自定义功能键的码值一样时,向一个特定的Service(如com.android ...

  7. Android 屏幕旋转的处理

    1. 不做任何处理的情况下 如果没有针对性地做任何处理的话,默认情况下,当用户手机的重力感应器打开后,旋转屏幕方向,会导致app的当前activity发生onDestroy-> onCreate ...

  8. Android 屏幕旋转时Activity的变化

    Android开发文档上专门有一小节解释这个问题.简单来说,Activity是负责与用户交互的最主要机制,任何"设置"(Configuration)的改变都可能对Activity的 ...

  9. 通过广播获取Android屏幕旋转事件

         Android获取系统屏幕旋转的方式有几种,其中比较常见的是通过重写Activity中的onConfigurationChanged方法,但是这种方法有个缺陷,当测试程序在后台运行的时候不能 ...

最新文章

  1. 软件定义的数据中心-【软件和信息服务】2012.11
  2. 使用容器和数据库克隆进行数据库迁移
  3. 背包九讲之五(二维费用的背包问题)
  4. 什么是java构造函数_什么是java构造函数
  5. DOS文件格式 与 UNIX文件格式 转换
  6. python中怎么写注释_Python中注释的写法
  7. android+阴影+xml,Android 阴影视图 ShadowViewHelper
  8. linux tcp连接计算机,计算机基础知识——linux socket套接字tcp连接分析
  9. abb变频器dp适配器说明书_国产变频器与西门子和ABB的差距大吗?
  10. 解决Julia使用PyPlot库出现ERROR: ArgumentError: hasproperty of NULL PyObject问题
  11. UIButton长度自适应文字长度
  12. kafka 安装步骤
  13. 为什么php在网页中不显示,为什么网页显示不出php代码_后端开发
  14. 饭卡管理系统学生E-R图
  15. Blackman 窗函数
  16. 航模舵机控制原理详解
  17. vtk实现一个简易的RubberBand 并求矩形内部hu平均值和最值
  18. 哈尔滨五星酒店马桶刷洗杯子事件舆情监测报告
  19. js写的 几款时间轴
  20. 生产制造业ERP管理系统财务管理解决方案

热门文章

  1. Java基础(学习笔记)
  2. AUGUSTUS安装 基因训练、预测软件
  3. 第七次全国人口普查公报[1](第八号) ——接受普查登记的港澳台居民和外籍人员情况
  4. Acknowledgements致谢词
  5. 什么是白帽/黑帽SEO?一次性看懂
  6. 关于两个正态总体均值差μ1-μ2的置信区间
  7. 2023美赛C题:预测Wordle结果-思路详解及参考代码
  8. 【VBS教程】 VBS能够干什么
  9. 2022-2028年中国水利工程行业市场行情动态及发展趋向分析报告
  10. 神州泰岳王宁:从高校团委书记到中关村富豪