美文网首页@IT·互联网鸿蒙(HarmonyOS)开发知识
[OpenHarmony UI实战]自定义对话框动效

[OpenHarmony UI实战]自定义对话框动效

作者: 迪士尼在逃程序员 | 来源:发表于2024-09-11 16:53 被阅读0次

前言

安卓可以通过 setWindowAnimations 方法可以设置自定义对话框进入时的各种动效,项目中要求模拟滑入动效;本文以下图实现效果(点击按钮后从上方飞入一个模态对话框)的实现代码为例提供一种思路和方法

实现思路和方法

模态对话框自带动效

OpenHarmony 提供了 自定义弹窗 ,模态对话框通常可以采用弹窗实现。

自定义弹窗组件在 api10 新增了 openAnimation 参数,类型为 AnimateParam,可以设置自定义设置弹窗弹出的动画效果相关参数;但 AnimateParam 只能设置动画时间,不能设置滑入动效;无法直接达成所需目标效果

组件间转场动效

OpenHarmony 系统的转场动画效果丰富;如组件内转场主要通过 transition 属性配置转场参数,在组件插入和删除时显示过渡动效;支持透明度/平移/旋转等动效且可以多种动效组合显示;图中所示动效可以通过 move 实现

思路及代码实现

由此可以结合上述技术点实现丰富动效:

1、定义一个变量 visible 控制弹窗内内容插入或删除

2、弹窗自定义 openAnimation,在 onFinish 回调中设置 visible 插入弹窗内容

3、弹窗中定义动画效果

具体代码如下,api10 上可以直接运行

// xxx.ets
@CustomDialog
struct CustomDialogExample {
  controller: CustomDialogController

  @Link visible:boolean

  build() {
    if (this.visible) {
      Column() {
        Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
        TextInput({ placeholder: '' }).height(60).width('90%')
          .onChange((value: string) => {

          })
        Text('Whether to change a text?').fontSize(16).margin({ bottom: 10 })
      }.borderRadius(10)
      .backgroundColor(Color.White)
      .transition(TransitionEffect.move(TransitionEdge.TOP).animation({ duration: 1000}))
      //.transition(TransitionEffect.move(TransitionEdge.TOP).animation({ duration: 1000}).combine(TransitionEffect.rotate({ z: 1, angle: 180 })))
    }
  }

  aboutToDisappear() {
    this.visible = false
  }
}

@Entry
@Component
struct CustomDialogUser {
  @State inputValue: string = 'click me'
  @State visible:boolean = false

  dialogController: CustomDialogController | null = new CustomDialogController({
    builder: CustomDialogExample({
      visible: $visible
    }),
    autoCancel: true,
    alignment: DialogAlignment.Bottom,
    offset: { dx: 0, dy: -20 },
    gridCount: 4,
    customStyle: true,
    backgroundColor: 0xd9ffffff,
    cornerRadius: 10,
    openAnimation:{duration:0, onFinish:()=>{
      this.visible = true
    }},
  })

  build() {
    Column() {
      Button(this.inputValue)
        .onClick(() => {
          if (this.dialogController != null) {
            this.dialogController.open()
          }
        }).backgroundColor(0x317aff)
    }.width('100%').margin({ top: 5 })
  }
}

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习知识点,请移步前往小编:https://gitee.com/MNxiaona/733GH/blob/master/jianshu

相关文章

  • 自定义进度条

    1.自定义进度条UI 2.进度条动效 Animate ProgressBar update in Android

  • UI动效

    分类: 衔接类动画:过度,自然 特效类动画:吸引注意力 PS将AE动画转换成gif的时候,ctrl+alt+shi...

  • UI动效

    1、挤压和拉伸 用来描述目标对象的刚性和质量,定义对象的物理属性。作用设计师你应该定义UI的属性:固定架构、刚性表...

  • UI动效

    动效软件 AE 动效软件的老大,功能强大,操作相对复杂,主要用于制作复杂的动画,简单的动画需求有其他更加容易上手的...

  • 自定义Segment

    自定义一个继承自UIView的类用来写Segment的UI和动效: SegmentView.h SegmentVi...

  • AE动效设计课堂笔记

    UI基础动效设计需要考虑的点: ①逻辑 ②空关系 ③层次感 ④架构 UI动效的三个特性: 功能性:动效对交互引导和...

  • 动态ui设计为什么越来越受欢迎?

    如今的APP设计当中,其中的UI动效也越来越酷炫,为什么UI动效越来越受到青睐呢? 下面就和大家聊聊APP UI动...

  • 产品体验日记02 - UI Movement

    今天体验一下 UI Movement​uimovement.com 这个UI动效的网站,里面的动效非常值得学习。 ...

  • 腾讯出品的交互微动效设计指南

    本设计指南适用于UI设​计界面中交互微动效,涵盖入场、出场动效,过渡动效和加载动效,在时间和缓动曲线的选择上提供了...

  • 成就出色的UI动效技巧

    改进UI交互的实用建议 让我们来看一些UI动效从良好到优秀的例子,只要稍稍调整,就可以使用动效来提升UI模式。 列...

网友评论

    本文标题:[OpenHarmony UI实战]自定义对话框动效

    本文链接:https://www.haomeiwen.com/subject/defqxjtx.html