RK3288 6.0 双屏异显,横屏+竖屏
由于是横屏+竖屏的组合,目前考虑两种实现方案。1.副屏存在黑边 2.对副屏内容进行拉伸。
默认情况下,我们设置的双屏初始rotation都为Surface.ROTATION_0,因此需将WSM中的updateRotationUncheckedLocked方法的该语句进行屏蔽。
if (mRotateOnBoot) {
mRotation = Surface.ROTATION_0;
rotation = Surface.ROTATION_90;
}
/* display portrait, force android rotation according to 90 */
if("true".equals(SystemProperties.get("persist.display.portrait","false"))){
rotation = Surface.ROTATION_90;
}
//LQH
// rotation = Surface.ROTATION_0;
/* display portrait end */
// if("vr".equals(SystemProperties.get("ro.target.product","tablet")))
// rotation = Surface.ROTATION_0;
if (mRotation == rotation && mAltOrientation == altOrientation) {
// No change.
return false;
}
同时在该工程中集成了对于主屏和副屏初始角度控制的补丁,通过build.prop文件进行配置即可。
ro.sf.hwrotation=0 主屏初始方向 (在./native/services/surfaceflinger/SurfaceFlinger.cpp进行赋值)
ro.orientation.einit=90 副屏初始方向
ro.same.orientation=false 主副屏orientaion是否相同
ro.rotation.external=false 副屏是否随主屏旋转
参考http://blog.csdn.net/ljp1205/article/details/53405641,了解Display框架及其初始化过程,主要对Display初始化时的参数进行调整。
该部分的代码在base/services/core/java/com/android/server/display/LocalDisplayAdapter.java的getDisplayDeviceInfoLocked()方法下完成:
@Override
public DisplayDeviceInfo getDisplayDeviceInfoLocked() {
if (mInfo == null) {
SurfaceControl.PhysicalDisplayInfo phys = mDisplayInfos[mActivePhysIndex];
mInfo = new DisplayDeviceInfo();
mInfo.width = phys.width;
mInfo.height = phys.height;
mInfo.modeId = mActiveModeId;
mInfo.defaultModeId = mDefaultModeId;
mInfo.supportedModes = new Display.Mode[mSupportedModes.size()];
for (int i = 0; i
DisplayModeRecord record = mSupportedModes.valueAt(i);
mInfo.supportedModes[i] = record.mMode;
}
mInfo.colorTransformId = mActiveColorTransformId;
mInfo.defaultColorTransformId = mDefaultColorTransformId;
mInfo.supportedColorTransforms =
new Display.ColorTransform[mSupportedColorTransforms.size()];