#鸿蒙通关秘籍#如何使用绝对定位和动画实现悬浮窗拖拽及吸附边缘效果?

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
CMO梦舞

悬浮窗通过使用Stack嵌套布局和position属性绝对定位实现悬浮显示。拖拽跟手效果使用animateTo结合curves.responsiveSpringMotion实现。手指抬起时悬浮窗通过判断中心位置设定靠左或靠右,并通过curves.springMotion弹性动画实现吸附效果。

Stack({ alignContent: Alignment.Bottom }) {
  Video({
    src: $rawfile('float_window_video.mp4'),
    controller: this.videoController
  })
    .controls(false)
    .autoPlay(true)
    .loop(true)
    .muted(true)
    .width($r('app.string.float_window_full_size'))
    .onClick(() => {
      this.videoController.requestFullscreen(true);
    })
    .borderRadius($r('app.string.ohos_id_corner_radius_default_l'))
  Text($r('app.string.float_window_live_text'))
    .width($r('app.string.float_window_full_size'))
    .fontSize($r('app.string.ohos_id_text_size_body1'))
    .fontColor($r('app.color.ohos_id_color_background'))
    .textAlign(TextAlign.Center)
    .backgroundColor($r('app.color.ohos_id_color_list_alert'))
    .borderRadius({
      bottomLeft: $r('app.string.ohos_id_corner_radius_default_l'),
      bottomRight: $r('app.string.ohos_id_corner_radius_default_l')
    })
}
.clip(true)
.border({
  width: $r('app.integer.float_window_border_width'),
  color: $r('app.color.ohos_id_color_background')
})
.borderRadius($r('app.string.ohos_id_corner_radius_default_l'))
.width(Constants.FLOAT_WINDOW_WIDTH)
.height(Constants.FLOAT_WINDOW_HEIGHT)
.backgroundColor($r('app.color.ohos_id_color_foreground'))
.position({ x: this.positionX, y: this.positionY })
.onTouch((event: TouchEvent) => {
  this.onTouchEvent(event);
})
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 悬浮拖拽功能怎么处理?
274浏览 • 1回复 待解决
使用悬浮端内want唤醒APP
860浏览 • 1回复 待解决
如何实现悬浮桌面穿透
755浏览 • 1回复 待解决