屏幕旋转

说明:本文基于4.1 release版本,其他版本可自行调整。

单屏旋转

system/etc/window/resources/display_manager_config.xml 文件中的最后一个参数可以控制屏幕的显示方向,数值的含义见说明,一般来说横屏为2。

img

更改后重启生效。

双屏旋转

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参数自行调整即可。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐