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

最终实现效果图:

实现步骤

创建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@Componentstruct 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@Componentstruct 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、添加进度条上的小圆饼

解决方法:

要调整小圆饼的位置:

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

  1. .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@Componentstruct 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 })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41635.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 多线程简要讲解

std::thread是 C11 标准库中用于多线程编程的核心类&#xff0c;提供线程的创建、管理和同步功能。下面我们一一讲解。 一.构造函数 官网的构造函数如下&#xff1a; 1.默认构造函数和线程创建 thread() noexcept; 作用&#xff1a;创建一个 std::thread 对象&#xff0c;但…

每天认识一个设计模式-建造者模式:复杂对象的“装配式革命“

一、前言 在软件开发的广袤领域中&#xff0c;随着项目规模日益庞大、业务逻辑愈发复杂&#xff0c;对象的创建过程也变得千头万绪。 早期简单的对象创建方式&#xff0c;在面对复杂对象时&#xff0c;逐渐显露出代码臃肿、耦合度高、可维护性差等弊端&#xff0c;设计模式的…

动态IP与静态IP该如何选?

一、当IP地址成为"网络身份" 2023年亚马逊封号潮中&#xff0c;某杭州卖家因登录IP频繁切换&#xff08;早8点在纽约&#xff0c;午间瞬移到东京&#xff09;&#xff0c;触发平台风控导致账号冻结。这类"时空错乱症"揭示了跨境电商的生存法则&#xff1a…

蓝桥与力扣刷题(蓝桥 蓝桥骑士)

题目&#xff1a;小明是蓝桥王国的骑士&#xff0c;他喜欢不断突破自我。 这天蓝桥国王给他安排了 N 个对手&#xff0c;他们的战力值分别为 a1,a2,...,an&#xff0c;且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战&#xff0c;也可以选择避战。 身为高傲的骑士&a…

Linux--文件

ok&#xff0c;我们今天了解一下Linux中的文件 理解“文件” 狭义理解 ⽂件在磁盘⾥磁盘是永久性存储介质&#xff0c;因此⽂件在磁盘上的存储是永久性的磁盘是外设&#xff08;即是输出设备也是输⼊设备&#xff09;磁盘上的⽂件本质是对⽂件的所有操作&#xff0c;都是对外…

Linux-数据结构-哈夫曼树-哈希表-内核链表

一.哈夫曼树 哈夫曼树&#xff08;Huffman Tree&#xff09;是一种特殊的二叉树&#xff0c;其定义和原理如下&#xff1a; 【1】定义 哈夫曼树是一种带权路径长度最短的二叉树。给定一组权值&#xff0c;将这些权值作为叶子节点的权值构造一棵二叉树&#xff0c;若该树的带…

前端抽象化,打破框架枷锁:统一路由的设计

个人博客原文地址 此文章并不适合初级前端来看&#xff0c;它是抽象的架构设计&#xff0c;需要一定的TS基础和抽象思维&#xff0c;若带着思考的读完本文章相信会让你感到充实 当然你也可以复制&#xff0c;然后在自己项目中去实现它&#xff0c;然后用起来 只要你是在写前端…

Docker 搭建部署 仓库的搭建以及网络设置

安装docker 一、关闭防火墙和SELinux 1.1systemctl stop firewalld 1.2setenfoce 0 二、配置内核转发以及网桥过滤 2.1vi /etc/sysctl.d/k8s.conf [rootopeneuler system]# vi /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-ip…

OSPF五种报文分析(仅部分比较重要的)

OSPF五种报文分别是&#xff1a; hello报文&#xff0c;DBD数据库描述报文&#xff0c;LSR链路状态请求报文&#xff0c;LSU链路状态更新报文&#xff0c;LSACK链路状态确认包 以下是这五种报文的详细解读&#xff1a; 1. Hello报文 作用&#xff1a; 用于邻居的发现、建立和…

【测试开发】OKR 小程序端黑盒测试报告

【测试报告】OKR 小程序端 项目名称版本号测试负责人测试完成日期联系方式OKR 小程序端4.0马铭胜2025-03-2515362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中&#xff0c;个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而&#xff0c;如何设定…

【C++】内存模型分析

在 C 语言中&#xff0c;程序运行时的内存通常被划分为以下几个区域&#xff1a; 代码区&#xff08;Text Segment&#xff09;常量区&#xff08;Constant Segment&#xff09;全局/静态区&#xff08;Data Segment&#xff0c;包含静态数据段和 BSS 段&#xff09;堆区&…

关于解决Ubuntu终端及系统字体大小的问题

在Ubuntu中调整终端和系统字体大小可以通过以下方法&#xff08;可能不仅仅只是这几种&#xff09;实现&#xff1a; 1. 调整系统字体大小 打开终端并输入以下命令&#xff0c;安装GNOME Tweaks&#xff0c;等待安装完成&#xff1a; sudo apt install gnome-tweaks 接着进行…

java8循环解压zip文件---实现Excel文件数据追加

java8循环追加Excel数据 实际遇到问题&#xff1a;定期获取zip文件&#xff0c;zip文件内有几个固定模板的Excel文件&#xff0c;有的Excel文件可能还包含多个sheet。 有段时间一次性获取到好几个zip包&#xff0c;需要将这些包都解压&#xff0c;并且按照不同的文件名、sheet进…

内网渗透技术 Docker逃逸技术(提权)研究 CSMSF

目录 如何通过上传的webshell判断当前环境是否是物理环境还是Docker环境 方法一&#xff1a;检查文件系统 方法二&#xff1a;查看进程 方法三&#xff1a;检查网络配置 方法四&#xff1a;检查环境变量 方法五&#xff1a;检查挂载点 总结 2. 如果是Docker环境&#x…

MTK平台 Android12-Android13 默认搜狗输入法

系统默认搜狗输入法功能实现 文章目录 需求&#xff1a;场景 参考资料需求实现内置搜狗输入法配置第三方apk .mk 和 搜狗安装包&#xff0c;不可卸载方式搜狗输入法module 配置到系统device.mk 中去 设置搜狗输入法为默认输入法给输入法授权&#xff0c;默认所有权限 总结思考 …

一周掌握Flutter开发--8. 调试与性能优化(上)

文章目录 8. 调试与性能优化核心技能8.1 使用 Flutter DevTools 分析性能8.2 检查 Widget 重绘&#xff08;debugPaintSizeEnabled&#xff09;8.3 解决 ListView 卡顿&#xff08;ListView.builder itemExtent&#xff09; 其他性能优化技巧8.4 减少 build 方法的调用8.5 使用…

【区块链安全 | 第一篇】密码学原理

文章目录 1.哈希函数1.1 哈希函数的性质1.2 常见哈希算法1.3 Merkle Tree&#xff08;默克尔树&#xff09;1.4 HMAC&#xff08;哈希消息认证码&#xff09; 2. 公钥密码学2.1 对称加密 vs 非对称加密2.2 RSA 算法2.3 ECC&#xff08;椭圆曲线密码学&#xff09;2.4 Diffie-He…

vim的一般操作(分屏操作) 和 Makefile 和 gdb

目录 一. vim的基本概念 二. vim基础操作 2.1 插入模式 aio 2.2 [插入模式]切换至[正常模式] Esc 2.3[正常模式]切换至[末行模式] shift ; 2.4 替换模式 Shift R 2.5 视图&#xff08;可视&#xff09;模式 (可以快速 删除//注释 或者 增加//注释) ctrl v 三&…

NFC 智能门锁全栈解决方案:移动端、服务器、Web 管理平台

目录 一、系统整体架构 二、移动端 APP 开发 2.1 开发环境与基础准备 2.2 主要功能模块 2.3 示例代码&#xff08;Android/Kotlin 简化示例&#xff09; 三、后台服务开发 3.1 环境准备 3.2 主要功能 3.3 示例代码&#xff08;Node.js Express 简化示例&#xff09; …

系统与网络安全------网络应用基础(5)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 虚拟化 虚拟化技术原理概述虚拟化虚拟化实现条件常见的虚拟化软件产品 VMware应用实战安装VMware Workstation创建新虚拟机虚拟机的硬件配置调整 虚拟化高级应用虚拟机备份虚拟机快照 虚拟化技术 原理概述 虚…