最终实现结果图:
实现步调
创建FullScreenPlay.ets全品播放页面
并将其修改为启动页面。
全屏播放,屏幕一定横过来,所以要将窗口横过来。
编辑
src/main/ets/entryability/EntryAbility.ets
若写在/EntryAbility.ets中,则全部窗口都是横屏,因此不应该写在UIAbility中,应该写在全屏播放的页面中。是个跳转。
当页面即将显示时,设置窗口显示方向为“横屏”。
编辑
这两个方法都可以,这两个方法有什么区别?
abouttoappear是全部组件都可以使用的方法,页面组件可以、局部组件也可以。
onPageShow()页面组件才有,其他组件没有。
abouttoappear先一步调用,页面即将显示时调用,不会有渐变的过程,onpageshow页面显示出来时间才调用,会有渐变的过程。
旋转动画应该放在onpageshow中。
编辑
全屏播放页面应用
如果放在onPageShow()中,会看到竖屏转换为横屏的结果。
如果放在aboutToAppear()中,一上来就会显示横屏,用户不会看到竖屏转换为横屏的结果。
我们这里使用aboutToAppear()
设置全屏
- async aboutToAppear(): Promise<void> {
- // 得到窗口对象, 并设置窗口显示方向为“横屏”。
- let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)
- w.setWindowLayoutFullScreen(true) // 设置窗口全屏
- // 设置窗口显示方向为“横屏”。
- w.setPreferredOrientation(window.Orientation.PORTRAIT) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
- }
复制代码
横屏显示
竖屏(肖像画):window.Orientation.PORTRAIT,
横屏(风景画):window.Orientation.LANDSCAPE
- async aboutToAppear(): Promise<void> {
- // 得到窗口对象, 并设置窗口显示方向为“横屏”。
- let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)
- w.setWindowLayoutFullScreen(true) // 设置窗口全屏
- // 设置窗口显示方向为“横屏”。
- w.setPreferredOrientation(window.Orientation.PORTRAIT) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
- }
复制代码
思量到性能,使用相对布局容器
背景致撑满整个屏幕
微调元素边距的三种方式
.margin({left: 50}) // 设置外边距,微调元素位置1 影响周围的兄弟元素
.offset({x:50, y:50}) // 设置偏移量,微调元素位置2 不会影响周围的兄弟元素
.position({x:1000, y:50}) // 设置位置,微调元素位置3 会影响周围的兄弟的元素
静态页面实现
1、顶部条 和 停息
- import { window } from '@kit.ArkUI';
- @Entry
- @Component
- struct FullScreenPlay {
- // 当页面即将显示时,设置窗口显示方向为“横屏”。
- async aboutToAppear(): Promise<void> {
- // 得到窗口对象, 并设置窗口显示方向为“横屏”。
- let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)
- w.setWindowLayoutFullScreen(true) // 设置窗口全屏
- // 设置窗口显示方向为“横屏”。
- w.setPreferredOrientation(window.Orientation.LANDSCAPE) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
- }
- build() {
- RelativeContainer() {
- // 1、最底部的视频
- Row(){
- }
- .width('100%')
- .height('100%')
- .backgroundColor('#AAA')
- // 2、顶部的 后退按钮+标题+更多
- Row(){
- // 后退按钮
- Image('/images/back.svg')
- .width(9)
- .height(15)
- .fillColor('#fff')
- // 标题
- Text('Axure RP9教程:手把手教你制作交互案例')
- .fontSize(16)
- .fontColor('#FCFCFC')
- .layoutWeight(1) // 权重 1 表示占据剩余空间
- .margin({left:20})
- // 更多
- Image('/images/more.svg')
- .width(24)
- .fillColor('#fff')
- }
- .width('100%')
- // .backgroundColor('#110')
- .padding({left:20 , right:20, top:20})
- // 3、播放/暂停按钮
- Image('/images/play2.svg')
- .width(50)
- .height(50)
- .alignRules({
- middle: {anchor:'__container__', align: HorizontalAlign.Center},
- center: {anchor:'__container__', align: VerticalAlign.Center}
- })
- // 4、底部的播放控制条
- }
- .height('100%')
- .width('100%')
- .backgroundColor('#fdd')
- }
- }
复制代码
2、底部进度条
- // 4、底部的播放控制条
- Row() {
- Text("03:23")
- .fontSize(12)
- .fontColor("#FFFFFF")
- Progress({
- value: 3.23 * 60,
- total: 5.31 * 60,
- type: ProgressType.Linear
- })
- .layoutWeight(1)
- .margin({ left: 8, right: 15 })
- .backgroundColor('#fff')
- .color('#f59a23')
- Text("05:31")
- .fontSize(12)
- .fontColor("#FFFFFF")
- Text("标清")
- .fontSize(12)
- .fontColor("#FFFFFF")
- .margin({ left: 15, right: 15 })
- Image('/images/zoomin.svg')
- .width(15)
- .height(15)
- }
- .width('100%')
- // .backgroundColor(Color.Pink)
- .alignRules({
- bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
- middle: { anchor: '__container__', align: HorizontalAlign.Center }
- })
- .padding({ bottom: 20, left: 30, right: 30 })
复制代码
完整代码:
- import { window } from '@kit.ArkUI';
- @Entry
- @Component
- struct FullScreenPlay {
- // 当页面即将显示时,设置窗口显示方向为“横屏”。
- async aboutToAppear(): Promise<void> {
- // 得到窗口对象, 并设置窗口显示方向为“横屏”。
- let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)
- w.setWindowLayoutFullScreen(true) // 设置窗口全屏
- // 设置窗口显示方向为“横屏”。
- w.setPreferredOrientation(window.Orientation.LANDSCAPE) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
- }
- build() {
- RelativeContainer() {
- // 1、最底部的视频
- Row() {
- }
- .width('100%')
- .height('100%')
- .backgroundColor('#7f7f7f')
- // 2、顶部的 后退按钮+标题+更多
- Row() {
- // 后退按钮
- Image('/images/back.svg')
- .width(9)
- .height(15)
- .fillColor('#fff')
- // 标题
- Text('Axure RP9教程:手把手教你制作交互案例')
- .fontSize(16)
- .fontColor('#FCFCFC')
- .layoutWeight(1)// 权重 1 表示占据剩余空间
- .margin({ left: 20 })
- // 更多
- Image('/images/more.svg')
- .width(24)
- .fillColor('#fff')
- }
- .width('100%')
- // .backgroundColor('#110')
- .padding({ left: 20, right: 20, top: 20 })
- // 3、播放/暂停按钮
- Image('/images/play2.svg')
- .width(50)
- .height(50)
- .alignRules({
- middle: { anchor: '__container__', align: HorizontalAlign.Center },
- center: { anchor: '__container__', align: VerticalAlign.Center }
- })
- // 4、底部的播放控制条
- Row() {
- Text("03:23")
- .fontSize(12)
- .fontColor("#FFFFFF")
- Progress({
- value: 3.23 * 60,
- total: 5.31 * 60,
- type: ProgressType.Linear
- })
- .layoutWeight(1)
- .margin({ left: 8, right: 15 })
- .backgroundColor('#fff')
- .color('#f59a23')
- Text("05:31")
- .fontSize(12)
- .fontColor("#FFFFFF")
- Text("标清")
- .fontSize(12)
- .fontColor("#FFFFFF")
- .margin({ left: 15, right: 15 })
- Image('/images/zoomin.svg')
- .width(15)
- .height(15)
- }
- .width('100%')
- // .backgroundColor(Color.Pink)
- .alignRules({
- bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
- middle: { anchor: '__container__', align: HorizontalAlign.Center }
- })
- .padding({ bottom: 20, left: 30, right: 30 })
- }
- .height('100%')
- .width('100%')
- .backgroundColor('#fdd')
- }
- }
复制代码 3、添加进度条上的小圆饼
办理方法:
要调整小圆饼的位置:
微调小圆饼的位置-三种方法
- .margin({left: 50}) // 设置外边距,微调元素位置1 影响周围的兄弟元素 (会影响周围元素,不合适)
- .offset({x:50, y:50}) // 设置偏移量,微调元素位置2 不会影响周围的兄弟元素()
- .position({x:1000, y:50}) // 设置位置,微调元素位置3 会影响周围的兄弟的元素()
- // 小圆饼
- Row(){
- }
- .width(20)
- .height(20)
- .borderRadius(10)
- .backgroundColor('#fff')
- // .offset({x:-60,y:0})
- .position({
- x: '60%',
- y: -8
- })
复制代码
创建项目》创建FullScreenPlay.ets全品播放页面,并将其修改为启动页面。
全屏播放,屏幕一定横过来,所以要将窗口横过来。
编辑
src/main/ets/entryability/EntryAbility.ets
若写在/EntryAbility.ets中,则全部窗口都是横屏,因此不应该写在UIAbility中,应该写在全屏播放的页面中。是个跳转。
当页面即将显示时,设置窗口显示方向为“横屏”。
编辑
这两个方法都可以,这两个方法有什么区别?
abouttoappear是全部组件都可以使用的方法,页面组件可以、局部组件也可以。
onPageShow()页面组件才有,其他组件没有。
abouttoappear先一步调用,页面即将显示时调用,不会有渐变的过程,onpageshow页面显示出来时间才调用,会有渐变的过程。
旋转动画应该放在onpageshow中。
编辑
全屏播放页面应用
如果放在onPageShow()中,会看到竖屏转换为横屏的结果。
如果放在aboutToAppear()中,一上来就会显示横屏,用户不会看到竖屏转换为横屏的结果。
我们这里使用aboutToAppear()
设置全屏
- async aboutToAppear(): Promise<void> {
- // 得到窗口对象, 并设置窗口显示方向为“横屏”。
- let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)
- w.setWindowLayoutFullScreen(true) // 设置窗口全屏
- // 设置窗口显示方向为“横屏”。
- w.setPreferredOrientation(window.Orientation.PORTRAIT) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
- }
复制代码
横屏显示
竖屏(肖像画):window.Orientation.PORTRAIT,
横屏(风景画):window.Orientation.LANDSCAPE
- async aboutToAppear(): Promise<void> {
- // 得到窗口对象, 并设置窗口显示方向为“横屏”。
- let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)
- w.setWindowLayoutFullScreen(true) // 设置窗口全屏
- // 设置窗口显示方向为“横屏”。
- w.setPreferredOrientation(window.Orientation.PORTRAIT) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
- }
复制代码
思量到性能,使用相对布局容器
撑满整个屏幕
微调边距的元素
.margin({left: 50}) // 设置外边距,微调元素位置1 影响周围的兄弟元素
.offset({x:50, y:50}) // 设置偏移量,微调元素位置2 不会影响周围的兄弟元素
.position({x:1000, y:50}) // 设置位置,微调元素位置3 会影响周围的兄弟的元素
静态页面实现
顶部条 和 停息
- import { window } from '@kit.ArkUI';
- @Entry
- @Component
- struct FullScreenPlay {
- // 当页面即将显示时,设置窗口显示方向为“横屏”。
- async aboutToAppear(): Promise<void> {
- // 得到窗口对象, 并设置窗口显示方向为“横屏”。
- let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)
- w.setWindowLayoutFullScreen(true) // 设置窗口全屏
- // 设置窗口显示方向为“横屏”。
- w.setPreferredOrientation(window.Orientation.LANDSCAPE) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
- }
- build() {
- RelativeContainer() {
- // 1、最底部的视频
- Row(){
- }
- .width('100%')
- .height('100%')
- .backgroundColor('#AAA')
- // 2、顶部的 后退按钮+标题+更多
- Row(){
- // 后退按钮
- Image('/images/back.svg')
- .width(9)
- .height(15)
- .fillColor('#fff')
- // 标题
- Text('Axure RP9教程:手把手教你制作交互案例')
- .fontSize(16)
- .fontColor('#FCFCFC')
- .layoutWeight(1) // 权重 1 表示占据剩余空间
- .margin({left:20})
- // 更多
- Image('/images/more.svg')
- .width(24)
- .fillColor('#fff')
- }
- .width('100%')
- // .backgroundColor('#110')
- .padding({left:20 , right:20, top:20})
- // 3、播放/暂停按钮
- Image('/images/play2.svg')
- .width(50)
- .height(50)
- .alignRules({
- middle: {anchor:'__container__', align: HorizontalAlign.Center},
- center: {anchor:'__container__', align: VerticalAlign.Center}
- })
- // 4、底部的播放控制条
- }
- .height('100%')
- .width('100%')
- .backgroundColor('#fdd')
- }
- }
复制代码

底部进度条
- // 4、底部的播放控制条
- Row() {
- Text("03:23")
- .fontSize(12)
- .fontColor("#FFFFFF")
- Progress({
- value: 3.23 * 60,
- total: 5.31 * 60,
- type: ProgressType.Linear
- })
- .layoutWeight(1)
- .margin({ left: 8, right: 15 })
- .backgroundColor('#fff')
- .color('#f59a23')
- Text("05:31")
- .fontSize(12)
- .fontColor("#FFFFFF")
- Text("标清")
- .fontSize(12)
- .fontColor("#FFFFFF")
- .margin({ left: 15, right: 15 })
- Image('/images/zoomin.svg')
- .width(15)
- .height(15)
- }
- .width('100%')
- // .backgroundColor(Color.Pink)
- .alignRules({
- bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
- middle: { anchor: '__container__', align: HorizontalAlign.Center }
- })
- .padding({ bottom: 20, left: 30, right: 30 })
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |