android 横竖屏切换
来源:互联网 发布:vm10 mac os补丁 编辑:程序博客网 时间:2024/06/09 18:41
android 横竖屏切换,屏幕旋转网上已经又很多参考资料,这里就不照搬照抄了。
这里想描述一个比较特殊的情况。在android应用开发中,我们可能遇到这种需求:限定屏幕只支持某个特定方向。当然,如果只支持横屏,或者只支持竖屏,都好处理,在AndroidManifest.xml里加限定android:screenOrientation="landscape"(或者portrait即可)。这里要提到的仍然是一种比较特殊的情况:限定横屏只支持180度,竖屏只支持270度。
首先我们需要在layout-landscape和layout-portrait目录下建立同名的layout文件。如果没有限定屏幕旋转时,activity不会被销毁重建,即在AndroidManifest.xml文件中没有加入android:configChanges="orientation|screenSize|keyboardHidden",那么情况很简单,当屏幕旋转的时候,acrivity将会销毁重建,这个时候自动加载对应的layout,没有任何问题。但是如果我们限定了当屏幕旋转的时候,activity不能被销毁,情况稍稍复杂。如果想要让应用加载不同的布局,很多文章提到在onConfigurationChanged()函数中拦截屏幕信息,进行特殊处理。实际上这个时候屏幕旋转已经发生,相应的资源都已经加载,这个时候再做任何处理都已经晚了,不会再起作用。正确的做法是扩展OrientationEventListener类,重载函数onOrientationChanged()。那么应该怎么处理呢?以下是一段示例代码,满足上述的限制只支持180度和270度的preview。
private void checkOrientation(int orientation) {
if (!mIsOrientationCheckNeeded) return;
if (0 == orientation % 180) {
if (ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT != getRequestedOrientation()) {
Log.v("Force to portrait view");
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
} else { /* 90 */
if (ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE != getRequestedOrientation()) {
Log.v("Force to landscape view");
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}
但是发现这种处理方法在某些特定应用(需要用到摄像头的应用,比如camera)中,当同时启用了face unlock(屏幕解锁),有可能会造成系统崩溃。原因在于face unlock也回调用摄像头,当设备处于被应用不支持的角度时,比如0度,用face unlock解锁,本来preview为0度,但是进入应用之后需要马上切换到180度,此时从face unlock的log中会发现有一个500ms的延时,因为face unlock还没有释放摄像头,并且还处于0度的状态,但是我们的app紧接着要求转入180度的preview,两者发生了冲突,系统无法分辨应该以哪个为准。一个workaround的做法是将以上操作插入消息队列,延时500ms再执行。
当然处理此类问题应该还有其它方法。
- Android 横竖屏切换
- Android横竖屏'切换
- Android横竖屏切换
- Android 横竖屏切换
- Android横竖屏切换
- android 横竖屏切换
- android 横竖屏切换
- Android横竖屏切换
- Android 横竖屏切换
- android切换横竖屏
- android 横竖屏切换
- Android横竖屏切换
- android 横竖屏切换
- Android横竖屏切换
- android 横竖屏切换
- Android横竖屏切换
- Android横竖屏切换
- Android横竖屏切换
- diff 如何看懂
- 结构型设计模式---代理模式(Proxy)
- mac上安装gradle
- 算法导论滴2章图的基本算法--广度优先搜索
- 单机下伪分布式hadoop搭建
- android 横竖屏切换
- uploadify 插件使用 包含 增删,修改样式,类似邮箱里的 添加附件 功能,也修复了uploadify存在的bug
- bzoj 3043 wikioi 2498 IncDec Sequence
- 黑马程序员_java入门
- Linux操作系统中/sbin/init程序的执行过程
- 新任务 新要求
- 第五章 处理器拦截器详解——跟着开涛学SpringMVC
- 最少乘法次数
- JAVA NIO原理个人理解