diff --git a/frameworks/core/components_ng/pattern/image_animator/image_animator_pattern.cpp b/frameworks/core/components_ng/pattern/image_animator/image_animator_pattern.cpp index c5c7443223e0087d53d7d6df3c29923a8206c998..af4a427c87f616d0c05ca87112e9d4dca83a8671 100644 --- a/frameworks/core/components_ng/pattern/image_animator/image_animator_pattern.cpp +++ b/frameworks/core/components_ng/pattern/image_animator/image_animator_pattern.cpp @@ -267,6 +267,10 @@ bool ImageAnimatorPattern::OnDirtyLayoutWrapperSwap(const RefPtr& void ImageAnimatorPattern::RunAnimatorByStatus(int32_t index) { + if (isAttachToFrameNode_ && status_ != ControlledAnimator::ControlStatus::RUNNING) { + isAttachToFrameNode_ = false; + status_ = ControlledAnimator::ControlStatus::IDLE; + } switch (status_) { case ControlledAnimator::ControlStatus::IDLE: controlledAnimator_->Cancel(); @@ -406,6 +410,7 @@ void ImageAnimatorPattern::OnAttachToFrameNode() UpdateBorderRadius(); RegisterVisibleAreaChange(); + isAttachToFrameNode_ = true; } void ImageAnimatorPattern::UpdateEventCallback() diff --git a/frameworks/core/components_ng/pattern/image_animator/image_animator_pattern.h b/frameworks/core/components_ng/pattern/image_animator/image_animator_pattern.h index f130c61bb598bd2971a3a89d3082e0220276edf9..feaf5daa0177dc13ac5b53c23b030edcb281942c 100644 --- a/frameworks/core/components_ng/pattern/image_animator/image_animator_pattern.h +++ b/frameworks/core/components_ng/pattern/image_animator/image_animator_pattern.h @@ -205,6 +205,7 @@ private: int32_t nowImageIndex_ = 0; bool isReverse_ = false; bool fixedSize_ = true; + bool isAttachToFrameNode_ = false; bool isImagesSame_ = false; bool imagesChangedFlag_ = false;