Android启动默认是横屏或者竖屏

来源:互联网 发布:超级淘宝店txt下载落秋 编辑:程序博客网 时间:2024/03/28 19:17

Android启动默认是横屏或者竖屏


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

今天来了搜了一下相关的内容,还是发现了不少知识
1. 可以在init.rc里指定系统是横屏还是竖屏

[plain] view plaincopy
  1. setprop ro.sf.hwrotation 0  指定默认输出不旋转(我们默认输出时竖屏)  
  2.         #setprop ro.sf.hwrotation 270   指定旋转270度输出  

2. 这个指定角度,Android默认只有0度和270度有效,180度无效,如果想使用180度,需要修改源码
修改文件frameworks/base/services/surfaceflinger/SurfaceFlinger.cpp

在方法

[cpp] view plaincopy
  1. void GraphicPlane::setDisplayHardware(DisplayHardware *hw)里加  
  2.                         case 180:  
  3.                     displayOrientation = ISurfaceComposer::eOrientation180;  
  4.                     break;  

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


2).设置窗体默认显示方向
在frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp文件中找到方法
setDisplayHardware
在switch中加入
[cpp] view plaincopy
  1. case 180:  
  2.             displayOrientation = ISurfaceComposer::eOrientation180;  
  3.             break;  

3).设置窗体动画旋转方向
     a > 在frameworks/base/core/java/android/view/Surface.java 加入方法
[cpp] view plaincopy
  1. /** 
  2.             * @hide 
  3.             */  
  4.             public static int getDefaultRotation(){  
  5.                 return android.os.SystemProperties.getInt("ro.sf.hwrotation", 0);//180  
  6.             }  
  7.   
  8.   
  9.             /** 
  10.             * @hide 
  11.             */    
  12.             public static int getDefaultRotationIndex(){  
  13.                 int rotation = getDefaultRotation();  
  14.         switch(rotation){  
  15.         case 0:  
  16.             return ROTATION_0;  
  17.         case 90:  
  18.             return ROTATION_90;  
  19.         case 180:  
  20.             return ROTATION_180;  
  21.         case 270:  
  22.             return ROTATION_270;  
  23.         }  
  24.         return ROTATION_0;  
  25.     }  

b > 在frameworks/base/services/java/com/android/server/vm/ScreenRotationAnimation.java 文件中找到(android4.1) 方法setRotation
或(android4.2)方法setRotationInTransaction 修改 deltaRotation(rotation,Surface.ROTATION_0);
为deltaRotation(rotation,Surface. getDefaultRotationIndex());


4).修改最近程序视图方向
   在frameworks/base/packages/systemui/src/com/android/systemui/RecentsPanelView.java 文件中修改如下
   private int mThumbnailHeight;//add
   在方法中添加
    
[cpp] view plaincopy
  1. public void updateVoluesFromResources(){  
  2.            ………………………………………………..  
  3.            mThumbnailHeight = Math.round(res.getDimension(R.dimen.status_bar_recents_thumbnail_height));//add  
  4.         }  

 在方法中添加
[java] view plaincopy
  1. private void updateThumbnail(…) {  
  2.           
  3.         else {  
  4.             Matrix scaleMatrix = new Matrix();  
  5.             float scale = mThumbnailWidth / (float) thumbnail.getWidth();  
  6.             scaleMatrix.postScale(scale, scale);//setScale  
  7.             h.thumbnailViewImage.setScaleType(ScaleType.MATRIX);  
  8.             h.thumbnailViewImage.setImageMatrix(scaleMatrix);  
  9.             //add  
  10.             if(Surface.getDefaultRotation() > 0){  
  11.             Matrix rotateMatrix = new Matrix();  
  12.             rotateMatrix.setRotate(Surface.getDefaultRotation(),mThumbnailWidth/2,mThumbnailHeight/2);  
  13.                 h.thumbnailViewImage.setImageMatrix(rotateMatrix);  
  14.             }  
  15.             //add end  
  16.         }  
5).修改截屏图片方向
  在frameworks/base/pacikages/systemui/src/com/android/systemui/GlobalScreenshot.java 文件中找到takeScreenshot方法
修改 float degrees = getDegreesForRotation(mDisplay.getRotation());

[java] view plaincopy
  1.   int rotation = mDisplay.getRotation();  
  2.   if(Surface.getDefaultRotation() > 0){  
  3.      rotation = (rotation + Surface.getDefaultRotationIndex())%4;  
  4. }  
  5. float degrees = getDegreesForRotation(rotation);  
OK 这样就完成屏幕旋转180度
0 0
原创粉丝点击