屏幕旋转
屏幕旋转 说明:本文基于4.1 release版本,其他版本可自行调整。 单屏旋转 system/etc/window/resources/display_manager_config.xml 文件中的最后一个参数可以控制屏幕的显示方向,数值的含义见说明,一般来说横屏为2。 更改后重启生效。 双屏旋转 1.主屏旋转 同单屏旋转 2.副屏旋转 根据源码,buildInDefaultOrientati
·
屏幕旋转
说明:本文基于4.1 release版本,其他版本可自行调整。
单屏旋转
system/etc/window/resources/display_manager_config.xml 文件中的最后一个参数可以控制屏幕的显示方向,数值的含义见说明,一般来说横屏为2。
更改后重启生效。
双屏旋转
1.主屏旋转
同单屏旋转
2.副屏旋转
根据源码,buildInDefaultOrientation 参数只会在主屏生效,因此只需改为副屏生效即可。
// foundation/window/window_manager/dmserver/src/abstract_screen_controller.cpp
void AbstractScreenController::ProcessScreenConnected(ScreenId rsScreenId)
{
std::lock_guard<std::recursive_mutex> lock(mutex_);
if (screenIdManager_.HasRsScreenId(rsScreenId)) {
WLOGFD("reconnect screen, screenId=%{public}" PRIu64"", rsScreenId);
ProcessDefaultScreenReconnected(rsScreenId);
return;
}
auto absScreen = InitAndGetScreen(rsScreenId);
if (absScreen == nullptr) {
return;
}
sptr<AbstractScreenGroup> screenGroup = AddToGroupLocked(absScreen);
if (screenGroup == nullptr) {
return;
}
// rsInterface_.GetDefaultScreenId()是主屏Id,要想副屏生效,只需改为rsScreenId != rsInterface_.GetDefaultScreenId()即可
// 要想双屏都生效,就去掉这一个判断
if (rsScreenId == rsInterface_.GetDefaultScreenId() && absScreen->rsDisplayNode_ != nullptr) {
absScreen->screenRequestedOrientation_ = buildInDefaultOrientation_;
Rotation rotationAfter = absScreen->CalcRotation(absScreen->screenRequestedOrientation_);
WLOGFD("set default rotation to %{public}d for buildin screen", rotationAfter);
sptr<SupportedScreenModes> abstractScreenModes = absScreen->GetActiveScreenMode();
只需改动上面这一个条件判断即可,然后单编此模块。
sudo ./build.sh --product-name rk3568 –ccache --no-prebuilt-sdk --fast-rebuild -T libdms
编译成功后将 out\rk3568\window\window_manager\libdms.z.so 文件推到 system/lib/ 路径下。
buildInDefaultOrientation参数自行调整即可。
更多推荐
已为社区贡献6条内容
所有评论(0)