首页 > 代码库 > Android4.0强制横屏竖屏

Android4.0强制横屏竖屏

Android的启动默认是横屏或者竖屏
我们的TV本来是横屏显示,但是有客户竟然要竖屏显示,昨天快下班收到的需求,竟然说7.19就要搞定。思路有2个,一个就是修改LCD的默认输出,但是这个不是我这个水平能轻而易举搞定的。另外一个就是底层应该给上层porting出接口。像这种系统性的接口一般在build.prop里。
找到一个相关度比较大的属性ro.sf.hwrotation=270,和旋转有关的,联想到0,90,180,270.试试吧,将其改为ro.sf.hwrotation=0,测试了一下,OK,满足客户要求了,就早点下班了。
/ device/samsung/smdk4x12/system.prop(ro.sf.hwrotation )
今天来了搜了一下相关的内容,还是发现了不少知识
1,可以在init.rc里指定系统是横屏还是竖屏

[普通]  鉴于普通副本

  1. 对应setProp ro.sf.hwrotation 0指定默认输出不旋转(我们默认输出时竖屏)  

  2.         #对应setProp ro.sf.hwrotation 270指定旋转270度输出  


2。这个指定角度,Android默认只有0度和270度有效,180度无效,如果想使用180度,需要修改源码
修改文件的框架/基地/服务/的surfaceflinger / SurfaceFlinger.cpp

在方法

[CPP]  鉴于普通副本

  1. 无效 GraphicPlane :: setDisplayHardware(DisplayHardware * HW)里加  

  2.                         案例 180:  

  3.                     displayOrientation = ISurfaceComposer :: eOrientation180;  

  4.                     打破;  

 

这样子就支持了180度了
3,还有更详细的 - 安卓4.1默认窗体旋转180度  
1)设置属性值
在系统/ build.prop文件中加入ro.sf.hwrotation = 180


2)设置窗体默认显示方向
在框架/本地/服务/的surfaceflinger / SurfaceFlinger.cpp文件中找到方法
setDisplayHardware
在交换机中加入

[CPP]  鉴于普通副本

  1. 案例 180:  

  2.             displayOrientation = ISurfaceComposer :: eOrientation180;  

  3.             打破;  


3)。设置窗体动画旋转方向
     一>在框架/底座/核心/ JAVA /机器人/视图/ Surface.java加入方法

[CPP]  鉴于普通副本

  1. / ** 

  2.             * @隐藏 

  3.             * /  

  4.             公共 静态 诠释 getDefaultRotation(){  

  5.                 返回 android.os.SystemProperties.getInt(“ro.sf.hwrotation” ,0); / / 180  

  6.             }  

  7.   

  8.   

  9.             / ** 

  10.             * @隐藏 

  11.             * /    

  12.             公共 静态 诠释 getDefaultRotationIndex(){  

  13.                 整型 旋转= getDefaultRotation();  

  14.         开关(旋转){  

  15.         情况下 0:  

  16.             返回 ROTATION_0;  

  17.         案例 90:  

  18.             返回 ROTATION_90;  

  19.         案例 180:  

  20.             返回 ROTATION_180;  

  21.         案例 270:  

  22.             返回 ROTATION_270;  

  23.         }  

  24.         返回 ROTATION_0;  

  25.     }  


B>在框架/基地/服务/ JAVA / COM /机器人/服务器/ VM / ScreenRotationAnimation.java文件中找到(android4.1)方法setRotation
或(android4.2)方法setRotationInTransaction修改deltaRotation(旋转,Surface.ROTATION_0);
为deltaRotation(旋转,表面getDefaultRotationIndex());


4)修改最近程序视图方向
   在框架/底座/包/ systemui / SRC / COM /机器人/ systemui / RecentsPanelView.java文件中修改如下
   私人诠释mThumbnailHeight ;/ /加
   在方法中添加
    

[CPP]  鉴于普通副本

  1. 公共 无效 updateVoluesFromResources(){  

  2.            ........................................................  

  3.            mThumbnailHeight = Math.round(res.getDimension(R.dimen.status_bar_recents_thumbnail_height)); / /添加  

  4.         }  


 在方法中添加

[Java]中 查看纯副本

  1. 私人 无效 updateThumbnail(...){  

  2.           

  3.         否则 {  

  4.             矩阵scaleMatrix =  新的 矩阵();  

  5.             浮 规模= mThumbnailWidth /(浮动)thumbnail.getWidth();  

  6.             scaleMatrix.postScale(刻度,刻度); / / setScale  

  7.             h.thumbnailViewImage.setScaleType(ScaleType.MATRIX);  

  8.             h.thumbnailViewImage.setImageMatrix(scaleMatrix);  

  9.             / /添加  

  10.             如果(Surface.getDefaultRotation()>  0 ){  

  11.             矩阵rotateMatrix =  新的 矩阵();  

  12.             rotateMatrix.setRotate(Surface.getDefaultRotation(),mThumbnailWidth / 2 ,mThumbnailHeight / 2 );  

  13.                 h.thumbnailViewImage.setImageMatrix(rotateMatrix);  

  14.             }  

  15.             / /添加结束  

  16.         }  

5)。修改截屏图片方向
  在框架/底座/ pacikages / systemui / SRC / COM /机器人/ systemui / GlobalScreenshot.java文件中找到takeScreenshot方法
修改浮度= getDegreesForRotation(mDisplay.getRotation());

[Java]中 查看纯副本

  1.   整型 旋转= mDisplay.getRotation();  

  2.   如果(Surface.getDefaultRotation()>  0 ){  

  3.      =旋转(旋转+ Surface.getDefaultRotationIndex())%4 ;  

  4. }  

  5. 浮 度= getDegreesForRotation(旋转);  

确定这样就完成屏幕旋转180度

Android4.0强制横屏竖屏