2013-07-05 104 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