@lyb/media-preview项目招募
现招募项目开发者,须使用仓颉编程语言完成项目开发,基于仓颉语言重构仿微信一镜到底效果的媒资预览框架,实现图片 / 视频等媒资的高效预览、自定义扩展及流畅的转场动画,填补仓颉语言在鸿蒙媒资预览组件领域的空白。
悬赏内容
招募内容
模块 1:核心基础能力开发
1.1 媒资模型定义
需实现通用默认媒资模型,并支持泛型自定义扩展,兼容图片、视频等基础媒资类型,核心字段包含媒资地址、宽高、类型等,仓颉语言示例代码规范:
// 仓颉语言 - 默认媒资模型定义
pub struct DefaultMediaModel {
pub uri: string; // 媒资资源地址
pub width: float; // 媒资宽度
pub height: float; // 媒资高度
pub mediaType: MediaType; // 媒资类型:图片/视频
}
// 媒资类型枚举
pub enum MediaType {
IMAGE,
VIDEO
}
// 泛型预览配置选项(核心,支持自定义模型)
pub struct MediaPreviewOptions<T> {
pub initIndex: int = 0; // 初始预览索引
pub medias: List<T>; // 媒资列表
pub thumbBuilder: (item: T, index: int) => Component; // 缩略图构建器
pub contentBuilder: (item: T, index: int) => Component; // 预览内容构建器
}
1.2 基础预览能力
实现媒资列表的加载与渲染,支持设置初始预览索引;
实现媒资的滑动切换(横向),支持懒加载优化,降低内存占用;
实现基础手势交互:双击缩放、双指捏合缩放 / 旋转、拖拽平移,缩放最大比例建议 1.5(防止失真);
实现预览窗口的打开 / 关闭,支持与主页面的无缝衔接。
仓颉语言核心调用示例:
// 仓颉语言 - 预览框架核心调用
pub class MediaPreview {
// 打开预览窗口,接收UI上下文和配置选项
pub static func open(context: UIContext, options: MediaPreviewOptions<Any>): void {
// 核心实现:渲染预览页面、绑定媒资数据、初始化动画
}
}
// 业务侧调用示例
let options = MediaPreviewOptions<DefaultMediaModel> {
initIndex: 0,
medias: mediaList
};
MediaPreview.open(getUIContext(), options);
1.3 仿微信一镜到底转场动画
这是核心功能,需实现入场 / 出场无缝转场,无闪屏、无卡顿,帧率稳定 60FPS,核心实现要求:
为列表项绑定唯一
geometryId,实现共享元素转场;记录点击项的位置、宽高信息,用于动画的起始 / 结束状态匹配;
实现卡片到预览页的宽高、位置属性动画,duration 建议 200ms;
预览时隐藏原列表项,返回时恢复显示,模拟微信原生体验;
解决 Image 组件渲染延迟导致的闪屏问题,添加渲染完成回调。
仓颉语言动画核心示例:
// 仓颉语言 - 一镜到底转场动画核心
pub struct MediaListItem<T> {
pub item: T;
pub index: int;
pub options: MediaPreviewOptions<T>;
build() {
Column() {
// 预览缩略图组件,绑定共享元素ID
Image(this.item.uri)
.geometryId(this.getGeometryId())
.onAreaChange((old, new) => {
// 记录元素位置/宽高信息
this.saveItemArea(new);
});
}
.onClick(() => {
// 隐藏当前项,打开预览
this.hideCurrentItem();
MediaPreview.open(getUIContext(), this.options);
});
}
// 生成唯一共享元素ID
func getGeometryId(): string {
return "media_item_" + this.index;
}
}
模块 2:高级定制能力开发
缩略图自定义:实现
thumbBuilder构建器,支持业务侧自定义媒资缩略图的渲染样式(如添加圆角、水印、播放按钮);预览内容自定义:实现
contentBuilder构建器,支持自定义预览页内容(如图片添加文字说明、视频添加播放控制栏);交互行为自定义:支持自定义预览页的关闭方式、手势触发阈值、动画时长等;
完全自定义媒资模型:支持业务侧继承默认模型或自定义全新模型,框架需兼容泛型解析。
模块 3:工程化配套开发
工程结构搭建:遵循鸿蒙仓颉语言开发规范,搭建清晰的工程结构(核心组件、模型、工具类、示例 Demo 分离);
示例 Demo 开发:实现 2 个基础 Demo—— 简单用法 Demo(快速集成)、自定义 Demo(全量定制能力展示);
开发文档编写:包含安装教程、快速开始、API 参考、自定义指南、迁移攻略等内容;
单元测试:对核心组件、动画逻辑、模型解析进行单元测试,测试覆盖率不低于 80%;
兼容性适配:保证在 HarmonyOS 5.0.0 (12) 及以上版本的真机 / 模拟器中正常运行,无崩溃、无兼容性报错。
相关附件
质量认证要求
本次开发对代码质量、功能体验、工程规范、兼容性四大维度制定严格的质量认证标准,所有要求需全部达标,以下为细分指标及验收标准:
维度 1:代码质量要求
语法规范:所有代码遵循仓颉语言官方语法规范,无语法错误、无未定义变量、无空指针风险(利用仓颉内存安全特性);
代码结构:组件化封装,高内聚低耦合,核心逻辑与 UI 渲染分离,工具类抽离复用,禁止冗余代码;
命名规范:类、结构体、方法、变量命名遵循驼峰命名法,常量全大写,命名语义化,禁止拼音 / 英文混合;
注释规范:公共类、公共方法、核心逻辑必须添加详细注释,注释覆盖率不低于 70%,支持文档自动生成;
性能优化:实现媒资懒加载,避免一次性加载所有资源;图片渲染使用缓存机制,防止 OOM;动画使用原生属性动画,禁止使用耗时的自定义绘制。
维度 2:功能体验要求
2.1 基础功能验收标准
功能点 | 验收标准 |
|---|---|
媒资加载 | 支持本地 / 网络媒资地址,加载失败时显示占位图,无崩溃 |
滑动切换 | 横向滑动流畅,无卡顿、无跳帧,切换时无白屏 |
手势交互 | 双击缩放 / 双指缩放 / 旋转响应灵敏,缩放后可拖拽平移,松手后回弹顺滑 |
预览窗口 | 打开 / 关闭响应及时,无延迟,支持返回键 / 点击空白处关闭 |
2.2 一镜到底动画验收标准
入场动画:点击列表项后,卡片平滑过渡到预览页,位置、宽高匹配精准,无偏移、无拉伸;
出场动画:关闭预览页后,预览内容平滑过渡回原列表项,恢复原位置 / 宽高,无闪屏;
动画流畅度:真机测试帧率稳定 60FPS,无掉帧、无卡顿,动画时长均匀,无忽快忽慢;
边界场景:列表项在屏幕顶部 / 底部 / 中间位置时,动画均正常生效,无异常。
2.3 定制能力验收标准
自定义模型:业务侧传入自定义模型后,框架能正常解析并渲染,无类型错误;
自定义构建器:通过
thumbBuilder/contentBuilder自定义的样式,能正常渲染,不影响核心功能;定制配置:修改动画时长、缩放比例等配置后,效果实时生效,无配置不生效问题。
维度 3:工程规范要求
工程结构:符合鸿蒙仓颉语言工程规范,目录结构清晰,如下为推荐结构:
plaintext
media-preview-cangjie/
├── core/ // 核心组件(预览页、动画、交互)
├── model/ // 媒资模型(默认模型、枚举、泛型定义)
├── util/ // 工具类(尺寸计算、动画工具、缓存工具)
├── demo/ // 示例Demo(简单用法、自定义用法)
├── test/ // 单元测试用例
├── README.md // 项目说明文档
└── CHANGELOG.md // 版本更新日志
依赖管理:无多余第三方依赖,仅依赖鸿蒙原生 API,降低集成成本;
开源协议:遵循 Apache-2.0 开源协议,工程中包含 LICENSE 文件,所有代码无版权问题;
文档完整性:开发文档包含安装教程、快速开始、API 参考、自定义示例、常见问题,内容准确、可落地,新手能快速集成。
维度 4:兼容性与稳定性要求
SDK 适配:在 HarmonyOS 5.0.0 (12) 及以上版本的真机 / 模拟器中,所有功能正常运行,无兼容性报错;
设备适配:支持手机、平板等鸿蒙设备,自适应不同屏幕尺寸,预览内容无拉伸、无变形;
稳定性:连续预览 100 + 张图片 / 10 + 个视频,无崩溃、无内存泄漏,内存占用稳定;
边界场景:处理空媒资列表、无效媒资地址、超大尺寸图片、超长视频等边界场景,无崩溃,有友好的错误提示。
维度 5:交付物完整性要求
最终需交付完整可运行的工程代码+配套文档+示例 Demo,具体包含:
仓颉语言编写的完整框架代码,可直接通过鸿蒙开发工具编译运行;
详细的开发文档(Markdown 格式),包含所有使用指南和 API 说明;
可直接运行的示例 Demo,包含基础用法和自定义用法;
单元测试用例,可直接执行并通过所有测试;
LICENSE 文件(Apache-2.0)、README.md、CHANGELOG.md。

