2013-07-05 106 views
0

由于硬件问题,我们必须将我们开发的Android平板电脑上下180度安装。我们设法翻转屏幕回来做以下修改,以正确的方向:Android屏幕旋转前180度旋转以正确定向

“框架/基/服务/ SurfaceFlinger的/ SurfaceFlinger.cpp”

无效GraphicPlane :: setDisplayHardware(DisplayHardware * HW) 。 。 displayOrientation = ISurfaceComposer :: eOrientation90; 休息; + case 180: + displayOrientation = ISurfaceComposer :: eOrientation180; // cdh + break; 情况270: displayOrientation = ISurfaceComposer :: eOrientation270; 休息;

“系统/核心/ ROOTDIR/init.rc”

# Set this property so surfaceflinger is not started by system_init 
setprop system_init.startsurfaceflinger 0 
    +#cdh 
    + setprop ro.sf.hwrotation 180 

    class_start core 
    class_start main 

一切看起来不错,但不知何故,屏幕将显示旋转过程中的正确方向前翻转180度。该平板电脑使用陀螺仪和加速计传感器在Android ICS上运行。

我试着从“frameworks/base/core/jave/android/view/WindowOrientationListener.java”检查Window Orientation Listener日志,并确保旋转过程中的方向是正确的。

我对传感器轴方向做了一些改变(在传感器驱动器上),但不知怎的,这并没有帮助。任何可以帮助解决这个问题的建议?

欣赏所有评论。

感谢, MM

回答

1

看看在 “框架/基/服务/ SurfaceFlinger的/ LayerScreenshot.cpp” 和它的方法: “LayerScreenshot :: initTexture”。修改这些参数:

mTexCoords[0] = 0;   mTexCoords[1] = v; 
mTexCoords[2] = 0;   mTexCoords[3] = 0; 
mTexCoords[4] = u;   mTexCoords[5] = 0; 
mTexCoords[6] = u;   mTexCoords[7] = v; 

为:

mTexCoords[0] = u;   mTexCoords[1] = 0; 
mTexCoords[2] = u;   mTexCoords[3] = v; 
mTexCoords[4] = 0;   mTexCoords[5] = v; 
mTexCoords[6] = 0;   mTexCoords[7] = 0; 

或其他人,可以解决你的情况。 希望能帮到你

+0

谢谢你的建议。我设法通过交换矩阵旋转(0 <-> 180; 90 <-> 270)在frameworks/base/services/java/com/android/server/wm/ScreenRotationAnimation.java文件的createRotationMatrix()旋转开关案例中。屏幕现在可以正确顺利旋转。 – user1662499