# TimeBar
**Repository Path**: harmonyos_samples/timebar
## Basic Information
- **Project Name**: TimeBar
- **Description**: 可缩放时间轴UI效果
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2025-10-23
- **Last Updated**: 2025-11-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 实现可缩放时间轴功能
## 项目介绍
本项目是一个基于Canvas和Video组件实现的时间轴联动视频播放Sample,核心功能是通过手势(平移、捏合缩放)控制视频时间轴,从而实现视频播放进度的快进、快退联动效果。
## 效果图预览
| 时间轴缩放 | 时间轴扩张 | 样式调整 |
| -------------------------------------------- | -------------------------------------------- |----------------------------------------------|
|
|
|
|
## 功能特性
- **手势控制时间轴**: 支持平移手势(拖动时间轴)和捏合缩放手势(调整时间轴刻度)。
- **视频播放与时间轴同步**: 视频播放进度与时间轴上的当前时间点实时同步,用户拖动时间轴时,视频播放会相应跳转。
- **多视频片段管理**: 能够加载并按时间顺序播放多个视频文件。
- **时间刻度动态调整**: 时间轴的刻度(小时/分钟模式)会根据用户的缩放手势自动或平滑切换,提供合适的视图粒度。
- **播放状态反馈**: 视频播放状态(播放、暂停)与时间轴同步,提升用户体验。
## 使用说明
1. 将独立的应用示例工程导入DevEco Studio进行编译构建及运行调试。
2. 安装运行后,即可在设备上查看应用示例运行效果,以及进行相关调试。
## 工程目录
```
├───entry/src/main/ets
│ ├───common
│ │ ├───contants
│ │ │ └───CommonConstants.ets // 常量
│ │ └───utils
│ │ └───CommonUtils.ets // 通用工具类
│ ├───components
│ │ └───VideoView.ets // 视频播放组件
│ ├───entryability
│ │ └───EntryAbility.ets // 程序入口类
│ ├───entrybackupability
│ │ └───EntryBackupAbility.ets // 备份恢复类
│ ├───model
│ │ ├───SegmentIndexInfo.ets // 时间轴偏移量定位片段的结果信息
│ │ └───VideoInfo.ets // 视频信息
│ └───pages
│ ├───Index.ets // 首页
│ ├───MultiStyleTimeBar.ets // 时间轴基础功能演示页面
│ └───TimeBarVideoLinkage.ets // 时间轴视频联动演示页面
├───entry/src/main/resources // 静态资源
└───time_bar/src/main/ets // 可伸缩时间轴静态共享库
├───components
│ ├───interface
│ │ ├───CustomDrawCallback.ets // 自定义绘制回调
│ │ ├───CustomDrawItem.ets // 自定义绘制配置项
│ │ ├───MiddleIndicatorOption.ets // 时间轴中线样式选项
│ │ ├───TimeBarOption.ets // 时间轴样式选项
│ │ ├───TimePickedCallback.ets // 时间轴回调
│ │ ├───TimeScaleOption.ets // 时间轴刻度样式选项
│ │ ├───VideoAreaOption.ets // 时间轴视频区域样式选项
│ │ └───VideoTimeBounds.ets // 时间轴视频区域时间边界
│ ├───viewModel
│ │ ├───RecordSegment.ets // 视频片段信息
│ │ └───TimeBarModel.ets // 时间轴的ViewModel逻辑层
│ └───TimeBarView.ets // 时间轴组件
├───contants
│ └───CommonConstants.ets // 常量
└───utils
└───CommonUtils.ets // 通用工具类
```
## 具体实现
### TimeBarView接口信息
`TimeBarView` 组件通过 `@Prop` 装饰器向外部暴露了以下属性和回调,用于配置其外观和行为:
| 名称 | 类型 | 默认值 | 说明 |
| --------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -------------------------------------------------------- |
| model | TimeBarModel | 必填(@Require) | 时间轴数据模型,集中管理 timeRange/currentTime 及边界 |
| middleIndicatorOption | MiddleIndicatorOption | `{ length: 100, fillColor: Color.Red }` | 中线样式 |
| intervalWidth | number | 10 | 邻接小刻度间的像素距离。10px 对应 10 分钟(即 1px=1min) |
| timeScaleOption | TimeScaleOption | `{ scaleLineWidth: 1, scaleLineHeight: 8, scaleTextColor: '#808080', scaleLineColor: 'rgb(206,206,205)', scaleAlignment: TOP }` | 刻度线与时间文字样式 |
| videoAreaOption | VideoAreaOption | `{ backgroundColor:'#606266', height:20, topOffset:40 }` | 录制区域(色条)展示样式 |
| timeBarOption | TimeBarOption | `{ width:'100%', height:100, backgroundColor:'rgb(245,245,244)' }` | 容器画布的宽高与背景色 |
| onContextReady | (ctx: CanvasRenderingContext2D, component: TimeBarView) => void | - | 画布上下文就绪回调,暴露 ctx 及组件 self |
### TimeBarView公开方法
| 方法 | 类型 | 说明 |
| ---------------------- |------------------------------------------------------------------------| ------------------------------------------------------------ |
| setTimeBarMoveListener | `(listener: TimePickedCallback) => void` | 注册时间轴移动/自动滚动回调(返回当前居中时间与状态 START/PLAYING/STOP) |
| registerCustomDraw | `(callback: CustomDrawCallback, zIndex?: number, id?: string) => void` | 注册自定义绘制,按 zIndex 从小到大绘制 |
| unregisterCustomDraw | `(param: string \| CustomDrawCallback) => void` | 取消注册自定义绘制 |
| clearAllCustomDraw | `() => void` | 清空所有自定义绘制回调 |
| safeDraw | `(cb: (ctx: CanvasRenderingContext2D) => void) => void` | 在内部封装的 save/restore 保护下进行一次性绘制,并触发重绘 |
## 相关权限
1. 播放网络视频需要的网络权限: ohos.permission.INTERNET
## 模块依赖
- 依赖[dayjs](https://ohpm.openharmony.cn/#/cn/detail/@mui%2Fdayjs)三方库
## 约束与限制
1. 本示例仅支持标准系统上运行,支持设备:华为手机。
2. HarmonyOS系统:HarmonyOS 6.0.0 Release及以上。
3. DevEco Studio版本:DevEco Studio 6.0.0 Release及以上。
4. HarmonyOS SDK版本:HarmonyOS 6.0.0 Release SDK及以上。