# LandscapePortraitToggle0830 **Repository Path**: kangliangup/LandscapePortraitToggle0830 ## Basic Information - **Project Name**: LandscapePortraitToggle0830 - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 14 - **Created**: 2024-08-28 - **Last Updated**: 2026-02-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实现视频横竖屏切换功能 ### 介绍 本示例基于媒体播放[AVPlayer](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-media-avplayer)、[setPreferredOrientation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#setpreferredorientation9-1)、Navigation的自定义导航转场动画([customNavContentTransition](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-navigation#customnavcontenttransition11))等能力、实现了一个视频播放应用,分别实现了页面内和页面级两种视频播放的横竖屏切换效果。其中页面内横竖屏切换是在当前页面,动态改变窗口方向来实现横竖屏切换;页面级横竖屏切换是在当前页面,跳转到新的页面实现横竖屏切换,该页面为横屏显示。 ## 效果预览 | 首页 | 页面内横竖屏切换 | 页面间横竖屏切换 | |------------------------------------------------------|-------------------------------------------------------|--------------------------------------------------------| | | | | ## 使用说明 1. 点击应用首页底部的“页面横屏播放”和“页面级横竖屏”播放按钮,分别跳转到对应场景的视频播放详情页面。 2. 页面内视频播放横竖屏切换:在视频竖屏播放的情况下(视频播放详情页),点击右下角的全屏图标,窗口会旋转到横屏状态,视频会跟着旋转并且铺满屏幕。 3. 页面级视频播放横竖屏切换:在视频竖屏播放的情况下(视频播放详情页),点击右下角的全屏图标,会跳转到新的页面(视频播放页面),该页面为横屏显示,同时视频会跟着旋转并且铺满屏幕。此外页面在跳转过程中会有“一镜到底”的显示动画效果,详情页的播放视图会旋转放大过渡到播放页面。 4. 在状态栏工具栏中的“旋转锁定”开关未打开的情况下,在视频详情页旋转屏幕到横屏,视频会自动旋转为横屏播放。 ## 目录结构 ``` ├──entry/src/main/ets │ ├──common │ │ ├──AnimationProperties.ets // 属性动画辅助类 │ │ ├──CustomTransition.ets // 自定义转场动画管理类 │ │ └──Logger.ets // 日志打印类 │ ├──entryability │ │ └──EntryAbility.ets // Ability的生命周期回调内容 │ ├──entrybackupability │ │ └──EntryBackupAbility.ets // 数据备份恢复类 │ ├──model │ │ ├──CommentModel.ets // 评论模型 │ │ └──RelatedModel.ets // 相关列表模型 │ ├──pages │ │ └──Index.ets // 应用首页 │ ├──transitionbetweenpage // 页面级视频播放切换目录 │ │ ├──DetailPlay.ets // 视频详情页 │ │ ├──LandscapePlay.ets // 全屏视频播放页面 │ │ └──VideoNodeController.ets // 视频组件自定义节点管理类 │ ├──transitioninpage // 页面间视频播放切换目录 │ │ ├──VideoDetail.ets // 视频详情页 │ │ └──VideoPlayView.ets // 视频播放组件 │ │──utils │ │ ├──AVPlayerUtil.ets // 视频播放工具类 │ │ ├──ComponentAttrUtils.ets // 获取组件信息工具类 │ │ └──WindowUtils.ets // 窗口工具类 │ └──views │ ├──BottomView.ets // 底部操作栏组件 │ ├──CommentsView.ets // 评论列表组件 │ └──RelatedListView.ets // 视频相关推荐组件 └──entry/src/main/resources // 应用静态资源目录 ``` ## 具体实现 * 视频播放功能基于AVPlayer实现,具体参考:[使用AVPlayer播放视频(ArkTS)](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-playback)。 * 页面内视频播放横竖屏切换:使用了window对象的[setPreferredOrientation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#setpreferredorientation9-1) 方法; * 页面级视频播放横竖屏播放:使用了Navigation的自定义导航转场动画能力([customNavContentTransition](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-navigation#customnavcontenttransition11)),结合[属性动画](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-animation-attribute)来实现。 ## 相关权限 不涉及 ## 依赖 不涉及。 ## 约束与限制 1. 本示例仅支持标准系统上运行,支持设备:华为手机。 2. HarmonyOS系统:HarmonyOS 6.0.2 Release及以上。 3. DevEco Studio版本:DevEco Studio 6.0.2 Release及以上。 4. HarmonyOS SDK版本:HarmonyOS 6.0.2 Release SDK及以上。