android4.0默认启动画面和正常显示旋转了180度,即为倒立的。原来是屏输出为倒的,查找得知可以做旋转:
步骤:
一:先把这个加上 然后加上属性ro.sf.hwrotation = 180
二:在init.rc脚本中添加如下内容: setprop ro.sf.hwrotation180
修改frameworks/base/services/surfaceflinger/SurfaceFlinger.cpp文件,在voidGraphicPlane::setDisplayHardware(DisplayHardware*hw)函数中添加如下内容:
case 180:
displayOrientation =ISurfaceComposer::eOrientation180;
break;
三:frameworksbaseservicesjavacomandroidserverwmScreenRotationAnimation.java
// Screenshot does NOT include rotation!
mSnapshotRotation = (SystemProperties.getInt("ro.sf.hwrotation",0)==180)?2:0;
//mSnapshotRotation = 0;
关于android屏幕旋转
跟屏幕相关的有,设置系统重力感应,设置屏幕状态,获得屏幕方向。
1. 系统重力感应可以理解为重力感应开关
screenchange = Settings.System.getInt(
activity.getContentResolver(),
Settings.System.ACCELEROMETER_ROTATION); 获得是否开启重力感应,1开启;
设置重力感应开关
Settings.System.putInt(
activity.getContentResolver(),
Settings.System.ACCELEROMETER_ROTATION, 0);
当设置了重力感应开关后,体现就是手机不能通过用户的手来切换手机屏幕时改变屏幕的方向,也就是拿着手机转会没有反应。设置重力感应开关是对用户的手起作用。
2. 设置屏幕状态
activity .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
这个参数有多中形式,比如这里的user是获取当前的屏幕方向,即用户选择
这里还可以设置屏幕方向为竖屏,为横屏;即SCREEN_ORIENTATION_PORTRAIT和SCREEN_ORIENTATION_LANDSCAPE;
所以现在看看1和2的联系,当重力开关如果关着,设置屏幕状态有无反应了。事实证明对于SCREEN_ORIENTATION_PORTRAIT和SCREEN_ORIENTATION_LANDSCAPE是可以的。也就是说,即使重力感应开关是关着的,如果通过设置屏幕状态为强制竖屏,或者强制横屏,设置的当前是生效的,生效完后,屏幕依然不能感应旋转。但是试过SCREEN_ORIENTATION_USER是不生效的。
3. 获得屏幕方向,如果要获取强制竖屏,强制横屏这种特殊页面的屏幕状态,可以用getRequestedOrientation,而现在要获得一个user屏幕状态的当前屏幕方向。因为user屏幕状态下是可以旋转的,这个时候就需要用到
android.view.WindowManager manager = context.getSystemService(Context.WINDOW_SERVICE);
int rotation = manager.getDefaultDisplay().getRotation();
rotation的值为Surface.ROTATION_90或Surface.ROTATION_270时表示竖屏
rotation的值为Surface.ROTATION_0或者Surface.ROTATION_180表示横屏
所以我们可以再特定的情况下用上面的方法,比如屏蔽用户手操作手机的旋屏事件,我们可以禁止重力感应响应,这样什么oncreate,configchange是肯定不会执行了。
而强制横竖屏时就可以选择屏幕状态,强制横屏,强制竖屏不受重力感应的影响。而且自适应屏幕也可以通过设置屏幕状态来达成。
当需要获得当前屏幕的状态,如果是强制横屏,强制竖屏,直接通过get屏幕状态就可以。但是如果是自适应,要获取屏幕状态,我们可以通过getRotation来确定当前屏幕是竖屏还是横屏状态。