diff --git a/frameworks/core/components_ng/pattern/image_animator/image_animator_model_ng.cpp b/frameworks/core/components_ng/pattern/image_animator/image_animator_model_ng.cpp index d9f8abd4b8563ed29c0b7df40937797c77720553..09d08d448b9f3cc826887cfc041d9aec898b1bc6 100644 --- a/frameworks/core/components_ng/pattern/image_animator/image_animator_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/image_animator/image_animator_model_ng.cpp @@ -22,6 +22,23 @@ namespace OHOS::Ace::NG { namespace { constexpr int32_t DEFAULT_DURATION = 1000; + void InitImageNodeInImageAnimator(FrameNode* frameNode) + { + CHECK_NULL_VOID(frameNode); + if (frameNode->GetChildren().empty()) { + auto imageNode = FrameNode::CreateFrameNode( + V2::IMAGE_ETS_TAG, -1, AceType::MakeRefPtr()); + CHECK_NULL_VOID(imageNode); + auto imagePattern = AceType::DynamicCast(imageNode->GetPattern()); + CHECK_NULL_VOID(imagePattern); + imagePattern->SetImageAnimator(true); + auto imageLayoutProperty = AceType::DynamicCast(imageNode->GetLayoutProperty()); + CHECK_NULL_VOID(imageLayoutProperty); + imageLayoutProperty->UpdateMeasureType(MeasureType::MATCH_PARENT); + frameNode->GetLayoutProperty()->UpdateAlignment(Alignment::TOP_LEFT); + frameNode->AddChild(imageNode); + } + } } void ImageAnimatorModelNG::Create() @@ -32,18 +49,6 @@ void ImageAnimatorModelNG::Create() auto frameNode = FrameNode::GetOrCreateFrameNode( V2::IMAGE_ANIMATOR_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr(); }); CHECK_NULL_VOID(frameNode); - if (frameNode->GetChildren().empty()) { - auto imageNode = FrameNode::CreateFrameNode(V2::IMAGE_ETS_TAG, -1, AceType::MakeRefPtr()); - CHECK_NULL_VOID(imageNode); - auto imagePattern = AceType::DynamicCast(imageNode->GetPattern()); - CHECK_NULL_VOID(imagePattern); - imagePattern->SetImageAnimator(true); - auto imageLayoutProperty = AceType::DynamicCast(imageNode->GetLayoutProperty()); - CHECK_NULL_VOID(imageLayoutProperty); - imageLayoutProperty->UpdateMeasureType(MeasureType::MATCH_PARENT); - frameNode->GetLayoutProperty()->UpdateAlignment(Alignment::TOP_LEFT); - frameNode->AddChild(imageNode); - } stack->Push(frameNode); } @@ -54,6 +59,8 @@ void ImageAnimatorModelNG::SetAutoMonitorInvisibleArea(bool autoMonitorInvisible void ImageAnimatorModelNG::SetImages(const std::vector& images) { + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + InitImageNodeInImageAnimator(frameNode); std::vector imageList = images; GetImageAnimatorPattern()->SetImages(std::move(imageList)); } @@ -174,6 +181,7 @@ RefPtr ImageAnimatorModelNG::CreateFrameNode(int32_t nodeId) void ImageAnimatorModelNG::SetImages(FrameNode* frameNode, const std::vector& images) { CHECK_NULL_VOID(frameNode); + InitImageNodeInImageAnimator(frameNode); std::vector imageList = images; auto imageAnimatorPattern = AceType::DynamicCast(frameNode->GetPattern()); imageAnimatorPattern->SetImages(std::move(imageList)); diff --git a/test/unittest/core/pattern/image_animator/image_animator_test_ng.cpp b/test/unittest/core/pattern/image_animator/image_animator_test_ng.cpp index fa90bbabd5ae82bc80153efb1c7c6cf442fda603..71385d452092f953e70714497bfb823b7d60c537 100644 --- a/test/unittest/core/pattern/image_animator/image_animator_test_ng.cpp +++ b/test/unittest/core/pattern/image_animator/image_animator_test_ng.cpp @@ -1006,6 +1006,43 @@ HWTEST_F(ImageAnimatorTestNg, ImageAnimatorTest012, TestSize.Level1) EXPECT_EQ(animator->GetDuration(), 0); } +/** + * @tc.name: ImageAnimatorTest013 + * @tc.desc: Test ImageAnimatorCreate. + * @tc.type: FUNC + */ +HWTEST_F(ImageAnimatorTestNg, ImageAnimatorTest013, TestSize.Level1) +{ + /** + * @tc.steps: step1. create ImageAnimatorModelNG. + */ + + ImageAnimatorModelNG ImageAnimatorModelNG; + ImageAnimatorModelNG.Create(); + + auto element = ViewStackProcessor::GetInstance()->Finish(); + auto frameNode = AceType::DynamicCast(element); + EXPECT_NE(frameNode, nullptr); + EXPECT_TRUE(frameNode->GetChildren().empty()); + + /** + * @tc.steps: step2. set image's attributes and imageAnimatorView's attributes. + * @tc.expected: step2. frameNode children size is not empty. + */ + + ImageProperties imageProperties; + imageProperties.src = IMAGE_SRC_URL; + imageProperties.width = IMAGE_WIDTH; + imageProperties.height = IMAGE_HEIGHT; + imageProperties.top = IMAGE_TOP; + imageProperties.left = IMAGE_LEFT; + imageProperties.duration = IMAGE_DURATION; + std::vector images; + images.push_back(imageProperties); + ImageAnimatorModelNG.SetImages(std::move(images)); + EXPECT_FALSE(frameNode->GetChildren().empty()); +} + /** * @tc.name: ImageAnimatorTest013 * @tc.desc: Set iteration and check iteration is correct assign