一、相关接口类
| 接口类名 | 描述 |
| TAVEditor | SDK 操作入口类。 |
| ITAVPipManager | 画中画操作接口类。 |
| TAVPip | 画中画数据模型类。 |
二、获取画中画操作接口
/** * 获取画中画操作接口 * * @return ITAVPipManager实例 */ITAVPipManager pipManager = editor.getPipManager();
三、创建画中画对象
/** * 创建画中画对象 * * @param type 资源类型(VIDEO / PHOTO) * @param mediaPath 画中画视频/图片路径 */TAVPip pip = pipManager.createPip(TAVMediaType.VIDEO, mediaPath);// 设置时间区间(微秒)pip.setTimeRange(TAVTimeRange.fromUs(0, durationUs));
四、加载画中画
/** * 加载画中画 * * @param pip 画中画数据对象 */pipManager.loadPip(pip);
五、移除画中画
/** * 移除画中画 * * @param pip 要移除的画中画对象 */pipManager.removePip(pip);
六、监听画中画列表变化
ITAVPipContextObserver 用于监听画中画集合的变化。
| 回调 | 参数 | 说明 |
| onPipListChanged(List<TAVPip> pips) | 当前全部画中画。 | 集合整体变化时回调,携带最新列表。 |
| onPipAdd(TAVPip pip) | 新增的画中画。 | 新增一个画中画时回调。 |
| onPipRemove(TAVPip pip) | 被移除的画中画。 | 移除一个画中画时回调。 |
观察者以弱引用持有,业务方必须自己保留强引用(例如作为成员变量),否则对象被回收后回调不再触发。
// 声明为成员变量,避免被 GCprivate final ITAVPipContextObserver mPipObserver = new ITAVPipContextObserver() { @Override public void onPipListChanged(List<TAVPip> pips) { // 列表整体变化 } @Override public void onPipAdd(TAVPip pip) { // 新增画中画 } @Override public void onPipRemove(TAVPip pip) { // 移除画中画 }};
// 注册与注销pipManager.addPipObserver(mPipObserver);pipManager.removePipObserver(mPipObserver);
注意:说明:
注意:TAVWidgetContentView 已内置实现该接口,使用自定义挂件手势层时通常无需重复注册。
七、使用示例
// 获取画中画操作接口ITAVPipManager pipManager = editor.getPipManager();// 创建画中画对象(TAVPip 构造函数为 protected,须通过管理接口创建)TAVPip pip = pipManager.createPip(TAVMediaType.VIDEO, context.getFilesDir() + "/video.mp4");pip.setTimeRange(TAVTimeRange.fromUs(0, 5_000_000)); // 0-5秒// 加载画中画pipManager.loadPip(pip);// 移除画中画pipManager.removePip(pip);