Android 4.1-4.2 默認窗體旋轉180 度代碼

1.設置屬性值

在system/build.prop文件中加入 ro.sf.hwrotation= 80

2.設置窗體默認顯示方向

在frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp文件中找到方法

setDisplayHardware

在switch中加入

case 180:

displayOrientation = ISurfaceComposer::eOrientation180;

break;

3.設置窗體動畫旋轉方向

a > 在frameworks/base/core/java/android/view/Surface.java 加入方法

/**
* @hide
*/
public static int getDefaultRotation(){
    return android.os.SystemProperties.getInt("ro.sf.hwrotation", 0);//180
}
/**
* @hide
*/
public static int getDefaultRotationIndex(){
    int rotation = getDefaultRotation();
    switch(rotation){
        case 0:
            return ROTATION_0;
        case 90:
            return ROTATION_90;
        case 180:
            return ROTATION_180;
        case 270:
            return ROTATION_270;
    }
    return ROTATION_0;
}

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());

3 .修改最近程序視圖方向

在frameworks/base/packages/systemui/src/com/android/systemui/RecentsPanelView.java 文件中修改如下

private int mThumbnailHeight;//add

在方法中添加

public void updateVoluesFromResources(){
    mThumbnailHeight = Math.round(res.getDimension(R.dimen.status_bar_recents_thumbnail_height));//add

}

在方法中添加

private void updateThumbnail(…) {

else {
    Matrix scaleMatrix = new Matrix();
    float scale = mThumbnailWidth / (float) thumbnail.getWidth();
    scaleMatrix.postScale(scale, scale);//setScale
    h.thumbnailViewImage.setScaleType(ScaleType.MATRIX);
    h.thumbnailViewImage.setImageMatrix(scaleMatrix);
    //add
    if(Surface.getDefaultRotation() > 0){
        Matrix rotateMatrix = new Matrix();
        rotateMatrix.setRotate(Surface.getDefaultRotation(),mThumbnailWidth/2,mThumbnailHeight/2);
    h.thumbnailViewImage.setImageMatrix(rotateMatrix);
    }
    //add end
}

4.修改截屏圖片方向

在frameworks/base/pacikages/systemui/src/com/android/systemui/GlobalScreenshot.java 文件中找到takeScreenshot方法

修改 float degrees = getDegreesForRotation(mDisplay.getRotation());


“`
int rotation = mDisplay.getRotation();
if(Surface.getDefaultRotation() > 0){
rotation = (rotation + Surface.getDefaultRotationIndex())%4;
}
float degrees = getDegreesForRotation(rotation);

OK 這樣就完成屏幕旋轉180度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章