鸿蒙-全屏播放页面(使用相对布局)---连续更新中

打印 上一主题 下一主题

主题 1936|帖子 1936|积分 5808

最终实现结果图:


实现步调

创建FullScreenPlay.ets全品播放页面

并将其修改为启动页面。


全屏播放,屏幕一定横过来,所以要将窗口横过来。


编辑
src/main/ets/entryability/EntryAbility.ets
若写在/EntryAbility.ets中,则全部窗口都是横屏,因此不应该写在UIAbility中,应该写在全屏播放的页面中。是个跳转。
当页面即将显示时,设置窗口显示方向为“横屏”。


编辑
这两个方法都可以,这两个方法有什么区别?
abouttoappear是全部组件都可以使用的方法,页面组件可以、局部组件也可以。
onPageShow()页面组件才有,其他组件没有。
abouttoappear先一步调用,页面即将显示时调用,不会有渐变的过程,onpageshow页面显示出来时间才调用,会有渐变的过程。
旋转动画应该放在onpageshow中。


编辑
全屏播放页面应用
如果放在onPageShow()中,会看到竖屏转换为横屏的结果。
如果放在aboutToAppear()中,一上来就会显示横屏,用户不会看到竖屏转换为横屏的结果。
我们这里使用aboutToAppear()
设置全屏

  1. async aboutToAppear(): Promise<void> {
  2.   // 得到窗口对象, 并设置窗口显示方向为“横屏”。
  3.   let w = await window.getLastWindow(getContext())  // 获取最后一个窗口(最近显示的窗口对象)
  4.   w.setWindowLayoutFullScreen(true) // 设置窗口全屏
  5.   // 设置窗口显示方向为“横屏”。
  6.   w.setPreferredOrientation(window.Orientation.PORTRAIT) //  竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
  7. }
复制代码

横屏显示

竖屏(肖像画):window.Orientation.PORTRAIT,
横屏(风景画):window.Orientation.LANDSCAPE
  1. async aboutToAppear(): Promise<void> {
  2.   // 得到窗口对象, 并设置窗口显示方向为“横屏”。
  3.   let w = await window.getLastWindow(getContext())  // 获取最后一个窗口(最近显示的窗口对象)
  4.   w.setWindowLayoutFullScreen(true) // 设置窗口全屏
  5.   // 设置窗口显示方向为“横屏”。
  6.   w.setPreferredOrientation(window.Orientation.PORTRAIT) //  竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
  7. }
复制代码

思量到性能,使用相对布局容器
背景致撑满整个屏幕



微调元素边距的三种方式

.margin({left: 50}) // 设置外边距,微调元素位置1 影响周围的兄弟元素
.offset({x:50, y:50}) // 设置偏移量,微调元素位置2 不会影响周围的兄弟元素
.position({x:1000, y:50}) // 设置位置,微调元素位置3 会影响周围的兄弟的元素
静态页面实现

1、顶部条 和 停息

  1. import { window } from '@kit.ArkUI';
  2. @Entry
  3.   @Component
  4.   struct FullScreenPlay {
  5.     // 当页面即将显示时,设置窗口显示方向为“横屏”。
  6.     async aboutToAppear(): Promise<void> {
  7.       // 得到窗口对象, 并设置窗口显示方向为“横屏”。
  8.       let w = await window.getLastWindow(getContext())  // 获取最后一个窗口(最近显示的窗口对象)
  9.       w.setWindowLayoutFullScreen(true) // 设置窗口全屏
  10.       // 设置窗口显示方向为“横屏”。
  11.       w.setPreferredOrientation(window.Orientation.LANDSCAPE) //  竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
  12.     }
  13.     build() {
  14.       RelativeContainer() {
  15.         // 1、最底部的视频
  16.         Row(){
  17.         }
  18.         .width('100%')
  19.           .height('100%')
  20.           .backgroundColor('#AAA')
  21.         // 2、顶部的 后退按钮+标题+更多
  22.         Row(){
  23.           // 后退按钮
  24.           Image('/images/back.svg')
  25.             .width(9)
  26.             .height(15)
  27.             .fillColor('#fff')
  28.           // 标题
  29.           Text('Axure RP9教程:手把手教你制作交互案例')
  30.             .fontSize(16)
  31.             .fontColor('#FCFCFC')
  32.             .layoutWeight(1) // 权重 1 表示占据剩余空间
  33.             .margin({left:20})
  34.           // 更多
  35.           Image('/images/more.svg')
  36.             .width(24)
  37.             .fillColor('#fff')
  38.         }
  39.         .width('100%')
  40.           // .backgroundColor('#110')
  41.           .padding({left:20 , right:20, top:20})
  42.         // 3、播放/暂停按钮
  43.         Image('/images/play2.svg')
  44.           .width(50)
  45.           .height(50)
  46.           .alignRules({
  47.             middle: {anchor:'__container__', align: HorizontalAlign.Center},
  48.             center: {anchor:'__container__', align: VerticalAlign.Center}
  49.           })
  50.         //   4、底部的播放控制条
  51.       }
  52.       .height('100%')
  53.         .width('100%')
  54.         .backgroundColor('#fdd')
  55.     }
  56.   }
复制代码

2、底部进度条

  1. //   4、底部的播放控制条
  2. Row() {
  3.   Text("03:23")
  4.     .fontSize(12)
  5.     .fontColor("#FFFFFF")
  6.   Progress({
  7.     value: 3.23 * 60,
  8.     total: 5.31 * 60,
  9.     type: ProgressType.Linear
  10.   })
  11.     .layoutWeight(1)
  12.     .margin({ left: 8, right: 15 })
  13.     .backgroundColor('#fff')
  14.     .color('#f59a23')
  15.   Text("05:31")
  16.     .fontSize(12)
  17.     .fontColor("#FFFFFF")
  18.   Text("标清")
  19.     .fontSize(12)
  20.     .fontColor("#FFFFFF")
  21.     .margin({ left: 15, right: 15 })
  22.   Image('/images/zoomin.svg')
  23.     .width(15)
  24.     .height(15)
  25. }
  26. .width('100%')
  27.   // .backgroundColor(Color.Pink)
  28.   .alignRules({
  29.     bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
  30.     middle: { anchor: '__container__', align: HorizontalAlign.Center }
  31.   })
  32.   .padding({ bottom: 20, left: 30, right: 30 })
复制代码

完整代码:
  1. import { window } from '@kit.ArkUI';
  2. @Entry
  3.   @Component
  4.   struct FullScreenPlay {
  5.     // 当页面即将显示时,设置窗口显示方向为“横屏”。
  6.     async aboutToAppear(): Promise<void> {
  7.       // 得到窗口对象, 并设置窗口显示方向为“横屏”。
  8.       let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)
  9.       w.setWindowLayoutFullScreen(true) // 设置窗口全屏
  10.       // 设置窗口显示方向为“横屏”。
  11.       w.setPreferredOrientation(window.Orientation.LANDSCAPE) //  竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
  12.     }
  13.     build() {
  14.       RelativeContainer() {
  15.         // 1、最底部的视频
  16.         Row() {
  17.         }
  18.         .width('100%')
  19.           .height('100%')
  20.           .backgroundColor('#7f7f7f')
  21.         // 2、顶部的 后退按钮+标题+更多
  22.         Row() {
  23.           // 后退按钮
  24.           Image('/images/back.svg')
  25.             .width(9)
  26.             .height(15)
  27.             .fillColor('#fff')
  28.           // 标题
  29.           Text('Axure RP9教程:手把手教你制作交互案例')
  30.             .fontSize(16)
  31.             .fontColor('#FCFCFC')
  32.             .layoutWeight(1)// 权重 1 表示占据剩余空间
  33.             .margin({ left: 20 })
  34.           // 更多
  35.           Image('/images/more.svg')
  36.             .width(24)
  37.             .fillColor('#fff')
  38.         }
  39.         .width('100%')
  40.           // .backgroundColor('#110')
  41.           .padding({ left: 20, right: 20, top: 20 })
  42.         // 3、播放/暂停按钮
  43.         Image('/images/play2.svg')
  44.           .width(50)
  45.           .height(50)
  46.           .alignRules({
  47.             middle: { anchor: '__container__', align: HorizontalAlign.Center },
  48.             center: { anchor: '__container__', align: VerticalAlign.Center }
  49.           })
  50.         //   4、底部的播放控制条
  51.         Row() {
  52.           Text("03:23")
  53.             .fontSize(12)
  54.             .fontColor("#FFFFFF")
  55.           Progress({
  56.             value: 3.23 * 60,
  57.             total: 5.31 * 60,
  58.             type: ProgressType.Linear
  59.           })
  60.             .layoutWeight(1)
  61.             .margin({ left: 8, right: 15 })
  62.             .backgroundColor('#fff')
  63.             .color('#f59a23')
  64.           Text("05:31")
  65.             .fontSize(12)
  66.             .fontColor("#FFFFFF")
  67.           Text("标清")
  68.             .fontSize(12)
  69.             .fontColor("#FFFFFF")
  70.             .margin({ left: 15, right: 15 })
  71.           Image('/images/zoomin.svg')
  72.             .width(15)
  73.             .height(15)
  74.         }
  75.         .width('100%')
  76.           // .backgroundColor(Color.Pink)
  77.           .alignRules({
  78.             bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
  79.             middle: { anchor: '__container__', align: HorizontalAlign.Center }
  80.           })
  81.           .padding({ bottom: 20, left: 30, right: 30 })
  82.       }
  83.       .height('100%')
  84.         .width('100%')
  85.         .backgroundColor('#fdd')
  86.     }
  87.   }
复制代码
3、添加进度条上的小圆饼







办理方法:
要调整小圆饼的位置:
微调小圆饼的位置-三种方法


  • .margin({left: 50}) // 设置外边距,微调元素位置1 影响周围的兄弟元素 (会影响周围元素,不合适)
  • .offset({x:50, y:50}) // 设置偏移量,微调元素位置2 不会影响周围的兄弟元素()



  • .position({x:1000, y:50}) // 设置位置,微调元素位置3 会影响周围的兄弟的元素()






  1. // 小圆饼
  2. Row(){
  3. }
  4. .width(20)
  5.   .height(20)
  6.   .borderRadius(10)
  7.   .backgroundColor('#fff')
  8.   // .offset({x:-60,y:0})
  9.   .position({
  10.     x: '60%',
  11.     y: -8
  12.   })
复制代码







创建项目》创建FullScreenPlay.ets全品播放页面,并将其修改为启动页面。



全屏播放,屏幕一定横过来,所以要将窗口横过来。



编辑
src/main/ets/entryability/EntryAbility.ets
若写在/EntryAbility.ets中,则全部窗口都是横屏,因此不应该写在UIAbility中,应该写在全屏播放的页面中。是个跳转。
当页面即将显示时,设置窗口显示方向为“横屏”。



编辑
这两个方法都可以,这两个方法有什么区别?
abouttoappear是全部组件都可以使用的方法,页面组件可以、局部组件也可以。
onPageShow()页面组件才有,其他组件没有。
abouttoappear先一步调用,页面即将显示时调用,不会有渐变的过程,onpageshow页面显示出来时间才调用,会有渐变的过程。
旋转动画应该放在onpageshow中。



编辑
全屏播放页面应用
如果放在onPageShow()中,会看到竖屏转换为横屏的结果。
如果放在aboutToAppear()中,一上来就会显示横屏,用户不会看到竖屏转换为横屏的结果。
我们这里使用aboutToAppear()

设置全屏

  1. async aboutToAppear(): Promise<void> {
  2.   // 得到窗口对象, 并设置窗口显示方向为“横屏”。
  3.   let w = await window.getLastWindow(getContext())  // 获取最后一个窗口(最近显示的窗口对象)
  4.   w.setWindowLayoutFullScreen(true) // 设置窗口全屏
  5.   // 设置窗口显示方向为“横屏”。
  6.   w.setPreferredOrientation(window.Orientation.PORTRAIT) //  竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
  7. }
复制代码


横屏显示

竖屏(肖像画):window.Orientation.PORTRAIT,
横屏(风景画):window.Orientation.LANDSCAPE
  1. async aboutToAppear(): Promise<void> {
  2.   // 得到窗口对象, 并设置窗口显示方向为“横屏”。
  3.   let w = await window.getLastWindow(getContext())  // 获取最后一个窗口(最近显示的窗口对象)
  4.   w.setWindowLayoutFullScreen(true) // 设置窗口全屏
  5.   // 设置窗口显示方向为“横屏”。
  6.   w.setPreferredOrientation(window.Orientation.PORTRAIT) //  竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
  7. }
复制代码


思量到性能,使用相对布局容器
撑满整个屏幕






微调边距的元素

.margin({left: 50}) // 设置外边距,微调元素位置1 影响周围的兄弟元素
.offset({x:50, y:50}) // 设置偏移量,微调元素位置2 不会影响周围的兄弟元素
.position({x:1000, y:50}) // 设置位置,微调元素位置3 会影响周围的兄弟的元素
静态页面实现

顶部条 和 停息
  1. import { window } from '@kit.ArkUI';
  2. @Entry
  3.   @Component
  4.   struct FullScreenPlay {
  5.     // 当页面即将显示时,设置窗口显示方向为“横屏”。
  6.     async aboutToAppear(): Promise<void> {
  7.       // 得到窗口对象, 并设置窗口显示方向为“横屏”。
  8.       let w = await window.getLastWindow(getContext())  // 获取最后一个窗口(最近显示的窗口对象)
  9.       w.setWindowLayoutFullScreen(true) // 设置窗口全屏
  10.       // 设置窗口显示方向为“横屏”。
  11.       w.setPreferredOrientation(window.Orientation.LANDSCAPE) //  竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
  12.     }
  13.     build() {
  14.       RelativeContainer() {
  15.         // 1、最底部的视频
  16.         Row(){
  17.         }
  18.         .width('100%')
  19.           .height('100%')
  20.           .backgroundColor('#AAA')
  21.         // 2、顶部的 后退按钮+标题+更多
  22.         Row(){
  23.           // 后退按钮
  24.           Image('/images/back.svg')
  25.             .width(9)
  26.             .height(15)
  27.             .fillColor('#fff')
  28.           // 标题
  29.           Text('Axure RP9教程:手把手教你制作交互案例')
  30.             .fontSize(16)
  31.             .fontColor('#FCFCFC')
  32.             .layoutWeight(1) // 权重 1 表示占据剩余空间
  33.             .margin({left:20})
  34.           // 更多
  35.           Image('/images/more.svg')
  36.             .width(24)
  37.             .fillColor('#fff')
  38.         }
  39.         .width('100%')
  40.           // .backgroundColor('#110')
  41.           .padding({left:20 , right:20, top:20})
  42.         // 3、播放/暂停按钮
  43.         Image('/images/play2.svg')
  44.           .width(50)
  45.           .height(50)
  46.           .alignRules({
  47.             middle: {anchor:'__container__', align: HorizontalAlign.Center},
  48.             center: {anchor:'__container__', align: VerticalAlign.Center}
  49.           })
  50.         //   4、底部的播放控制条
  51.       }
  52.       .height('100%')
  53.         .width('100%')
  54.         .backgroundColor('#fdd')
  55.     }
  56.   }
复制代码


底部进度条
  1. //   4、底部的播放控制条
  2. Row() {
  3.   Text("03:23")
  4.     .fontSize(12)
  5.     .fontColor("#FFFFFF")
  6.   Progress({
  7.     value: 3.23 * 60,
  8.     total: 5.31 * 60,
  9.     type: ProgressType.Linear
  10.   })
  11.     .layoutWeight(1)
  12.     .margin({ left: 8, right: 15 })
  13.     .backgroundColor('#fff')
  14.     .color('#f59a23')
  15.   Text("05:31")
  16.     .fontSize(12)
  17.     .fontColor("#FFFFFF")
  18.   Text("标清")
  19.     .fontSize(12)
  20.     .fontColor("#FFFFFF")
  21.     .margin({ left: 15, right: 15 })
  22.   Image('/images/zoomin.svg')
  23.     .width(15)
  24.     .height(15)
  25. }
  26. .width('100%')
  27. // .backgroundColor(Color.Pink)
  28. .alignRules({
  29.   bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
  30.   middle: { anchor: '__container__', align: HorizontalAlign.Center }
  31. })
  32. .padding({ bottom: 20, left: 30, right: 30 })
复制代码






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表