!24823 修复replace动效异常

Merge pull request !24823 from shilei91/master
This commit is contained in:
openharmony_ci 2024-01-02 07:41:16 +00:00 committed by Gitee
commit 26b25c652e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 26 additions and 0 deletions

View File

@ -393,6 +393,8 @@ void NavigationPattern::CheckTopNavPathChange(
TransitionWithOutAnimation(preTopNavDestination, newTopNavDestination, isPopPage);
navigationStack_->UpdateAnimatedValue(true);
} else {
// before the animation of navDes replacing, update the zIndex of the previous navDes node
UpdatePreNavDesZIndex(preTopNavDestination, newTopNavDestination);
// transition with animation need to run after layout task
context->AddAfterLayoutTask(
[preTopNavDestination, newTopNavDestination, isPopPage, weakNavigationPattern = WeakClaim(this)]() {
@ -1283,4 +1285,26 @@ void NavigationPattern::OnColorConfigurationUpdate()
CHECK_NULL_VOID(theme);
dividerNode->GetRenderContext()->UpdateBackgroundColor(theme->GetNavigationDividerColor());
}
void NavigationPattern::UpdatePreNavDesZIndex(const RefPtr<FrameNode> &preTopNavDestination,
const RefPtr<FrameNode> &newTopNavDestination)
{
auto replaceVal = navigationStack_->GetReplaceValue();
if (replaceVal != 0 && preTopNavDestination && newTopNavDestination) {
auto hostNode = AceType::DynamicCast<NavigationGroupNode>(GetHost());
CHECK_NULL_VOID(hostNode);
auto navigationContentNode = AceType::DynamicCast<FrameNode>(hostNode->GetContentNode());
CHECK_NULL_VOID(navigationContentNode);
auto newDesNodeContext = newTopNavDestination->GetRenderContext();
CHECK_NULL_VOID(newDesNodeContext);
std::optional<int32_t> newNodeZIndex = newDesNodeContext->GetZIndex();
auto preDesNodeContext = preTopNavDestination->GetRenderContext();
CHECK_NULL_VOID(preDesNodeContext);
preDesNodeContext->UpdateZIndex(newNodeZIndex.value_or(0) - 1);
navigationContentNode->RebuildRenderContextTree();
auto context = PipelineContext::GetCurrentContext();
CHECK_NULL_VOID(context);
context->RequestFrame();
}
}
} // namespace OHOS::Ace::NG

View File

@ -347,6 +347,8 @@ private:
bool UpdateTitleModeChangeEventHub(const RefPtr<NavigationGroupNode>& hostNode);
void NotifyPageShow(const std::string& pageName);
int32_t FireNavDestinationStateChange(bool show);
void UpdatePreNavDesZIndex(const RefPtr<FrameNode> &preTopNavDestination,
const RefPtr<FrameNode> &newTopNavDestination);
NavigationMode navigationMode_ = NavigationMode::AUTO;
std::function<void(std::string)> builder_;
RefPtr<NavigationStack> navigationStack_;