diff --git a/wmserver/src/window_layout_policy_cascade.cpp b/wmserver/src/window_layout_policy_cascade.cpp index 8faa6d614bcee6607398aec1de1afb1927ca164e..f8f36251cf347c72f93560d7a1d730d0011c7fb0 100644 --- a/wmserver/src/window_layout_policy_cascade.cpp +++ b/wmserver/src/window_layout_policy_cascade.cpp @@ -223,7 +223,15 @@ void WindowLayoutPolicyCascade::UpdateLayoutRect(sptr& node) CalcAndSetNodeHotZone(winRect, node); if (IsLayoutChanged(lastRect, winRect) || node->GetWindowType() == WindowType::WINDOW_TYPE_DOCK_SLICE) { node->GetWindowToken()->UpdateWindowRect(winRect, node->GetWindowSizeChangeReason()); - node->surfaceNode_->SetBounds(winRect.posX_, winRect.posY_, winRect.width_, winRect.height_); + if (node->GetWindowSizeChangeReason() == WindowSizeChangeReason::MAXIMIZE || + node->GetWindowSizeChangeReason() == WindowSizeChangeReason::RECOVER) { + const RSAnimationTimingProtocol timingProtocol(400); + RSNode::Animate(timingProtocol, RSAnimationTimingCurve::EASE_OUT, [=]() { + node->surfaceNode_->SetBounds(winRect.posX_, winRect.posY_, winRect.width_, winRect.height_); + }); + } else { + node->surfaceNode_->SetBounds(winRect.posX_, winRect.posY_, winRect.width_, winRect.height_); + } } }