HarmonyOS 路径动画相关问题

使用以下官方demo做个贝塞尔曲线动画,设定好移动path。

1、布局里必须设置.alignItems(this.toggle ? HorizontalAlign.Start : HorizontalAlign.Center)动画才能生效这个是为什么?直接使用 .alignItems(HorizontalAlign.Start)就没有动画移动效果,为什么?

2、如果 Column()下还有其他控件例如Text 就会被动画影响到布局,这个明显不符合期望

3、是不是只能如demo那样写,有没有其他好的方案?

代码示例:

// xxx.ets  
@Entry  
@Component  
struct MotionPathExample {  
  @State toggle: boolean = true  
  build() {  
    Column() {  
      Button('click me').margin({ left: 50, top: 50 })  
        .motionPath({ path: 'M 300 300 Q 600 1000 100 2000', from: 0.0, to: 1.0, rotatable: false })  
        .onClick(() => {  
          animateTo({ duration: 4000, curve: Curve.Linear }, () => {  
            this.toggle = !this.toggle // 通过this.toggle变化组件的位置  
          })  
        })  
      Text('测试')  
        .margin({ left: 20, top: 30 })  
    }  
    .width('100%')  
    .height('100%')  
    .alignItems(this.toggle ? HorizontalAlign.Start : HorizontalAlign.Center)  
  }  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
HarmonyOS
2024-09-27 13:02:57
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Heiang

问题1:路径动画的触发条件是元素的位置发生变化,所以当切换toggle 的时候如果位置没有发生变化就不会生效。

问题2:text布局发生变化是因为父容器的排列方式发生了变化,更改触发条件即可。

问题3:参考下面demo实现:

@Entry  
@Component  
struct MotionPathExample {  
  @State toggle: boolean = true  
  @State marginLeft: number = 50  
  build() {  
    Column() {  
      Button('click me').margin({ left: this.marginLeft, top: 50 })  
        .motionPath({  
          path: 'M 300 300 Q 600 1000 100 2000',  
          from: 0.0,  
          to: 1.0,  
          rotatable: false  
        })  
        .onClick(() => {  
          animateTo({ duration: 4000, curve: Curve.Linear }, () => {  
            this.marginLeft = 51  
          })  
        })  
      Text('测试')  
        .margin({ left: 20, top: 30 })  
    }  
    .width('100%')  
    .height('100%')  
    .alignItems(HorizontalAlign.Start)  
  }  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
分享
微博
QQ
微信
回复
2024-09-27 16:24:43
相关问题
HarmonyOS 动画使用问题
602浏览 • 1回复 待解决
HarmonyOS 缩放动画问题
527浏览 • 1回复 待解决
HarmonyOS 组件动画问题
639浏览 • 1回复 待解决
HarmonyOS KVStore 相关问题
1016浏览 • 1回复 待解决
HarmonyOS Worker相关问题
889浏览 • 1回复 待解决
HarmonyOS AccountKit相关问题
1224浏览 • 1回复 待解决
HarmonyOS 线程相关问题
1310浏览 • 1回复 待解决
HarmonyOS 证书相关问题
1034浏览 • 1回复 待解决
HarmonyOS Lib相关问题
690浏览 • 1回复 待解决
HarmonyOS string相关问题
925浏览 • 1回复 待解决
HarmonyOS BindSheet相关问题
1421浏览 • 1回复 待解决
HarmonyOS Grid相关问题
1252浏览 • 1回复 待解决
HarmonyOS router路由路径问题
1122浏览 • 1回复 待解决
HarmonyOS PushExtensionAbility相关问题
827浏览 • 1回复 待解决
HarmonyOS CardRecognition相关问题
924浏览 • 1回复 待解决
适配HarmonyOS相关问题
975浏览 • 1回复 待解决
HarmonyOS音频相关问题
1512浏览 • 1回复 待解决
HarmonyOS RN相关问题
1393浏览 • 1回复 待解决
HarmonyOS ApplicationContext相关问题
1022浏览 • 1回复 待解决
HarmonyOS protobuf相关问题
1277浏览 • 1回复 待解决
HarmonyOS RelativeContainer相关问题
728浏览 • 1回复 待解决
HarmonyOS 混淆相关问题
783浏览 • 1回复 待解决
HarmonyOS @Event相关问题
903浏览 • 1回复 待解决
HarmonyOS 地图相关问题
1553浏览 • 1回复 待解决