保利威文档中心

幫助中心

6_5-互动学堂场景-文档

更新時間:2023-04-17 15:27:57

1 功能概述

文件(PPT 與黑板)模組包含黑板、PPT 展示、畫筆標註等功能。文件模組的整個介面被封裝在 PLVHCDocumentLayout 中。

2 使用演示

使用文件模組只需在 Activity 的佈局中加入 PLVHCDocumentLayout 佈局,並呼叫其初始化方法即可。

// PLVHCLiveHiClassActivity.java
private void initView() {
    // 文档布局
    plvhcDocumentLy = findViewById(R.id.plvhc_document_ly);
    // 初始化文档布局,传入初始化所需的参数
    plvhcDocumentLy.init(liveRoomDataManager);
}

同時,也可以設定佈局的監聽回呼,以便在不同模組佈局之間進行通訊。

// IPLVHCDocumentLayout 设置监听器方法定义
/**
  * 设置view交互事件监听器
  *
  * @param listener 监听器
  */
void setOnViewActionListener(OnViewActionListener listener);

/**
  * view交互事件监听器
  */
interface OnViewActionListener {

    /**
      * 回调标注工具按钮状态变更
      *
      * @param showUndoButton   是否显示撤销按钮
      * @param showDeleteButton 是否显示删除按钮
      */
    void onChangeMarkToolOperationButtonState(boolean showUndoButton,
                                              boolean showDeleteButton);
}

3 實作介紹

3.1 IPLVHCDocumentLayout

文件佈局是一個 ViewGroup,主要由一個負責顯示黑板 PPT 的 WebView - IPLVDocumentContainerView,和一個疊加在 WebView 上方負責控制標註畫筆等功能的功能列 - PLVHCMarkToolControllerLayout 所構成。

@Override
public void init(IPLVLiveRoomDataManager liveRoomDataManager) {
    // 初始化 MVP - View     
    initMvpView();
    // 初始化文档Webview
    initContainerView(liveRoomDataManager);
}

3.2 PLVHCMarkToolControllerLayout

功能列是一個皮膚佈局,包含標註工具、畫筆、文字、橡皮擦、移動黑板等功能。它不直接操作黑板 PPT 的 WebView,而是透過呼叫 PLVHCDocumentLayout 提供的相關方法,由 PLVHCDocumentLayout 再對文件 WebView 狀態進行修改。以下程式碼展示當使用者點擊箭頭標註工具時,如何告知 WebView 切換到箭頭標註狀態。

// PLVHCMarkToolControllerLayout.java
//初始化标注集合
markToolViewMap = mapOf(	
        // 箭头标注的view及其对应的枚举
        pair(PLVHCMarkToolEnums.MarkTool.ARROW, plvhcToolbarMarkToolArrowIv),
        // 此处省略其他代码
);
//设置标注的点击事件
foreach(markToolViewMap.entrySet(), new PLVSugarUtil.Consumer<Map.Entry<PLVHCMarkToolEnums.MarkTool, PLVRoundImageView>>() {
    @Override
    public void accept(Map.Entry<PLVHCMarkToolEnums.MarkTool, PLVRoundImageView> entry) {
        final PLVHCMarkToolEnums.MarkTool markTool = entry.getKey();
        final PLVRoundImageView view = entry.getValue();
        view.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!PLVHCMarkToolEnums.MarkTool.CLEAR.equals(markTool)) {
                    updateCurrentSelectedMarkTool(markTool);
                }
                if (onChangeMarkToolStateListener != null) {
                    // 标注工具类型变更回调触发
                    onChangeMarkToolStateListener.onChangeMarkTool(markTool);
                }
                hide();
            }
        });
    }
});


// PLVLSDocumentLayout.java
if (markTool != PLVHCMarkToolEnums.MarkTool.CLEAR) {
    lastSelectMarkTool = markTool;
    // 其他标注工具的处理逻辑
    containerView.sendEvent(new PLVChangeApplianceEvent(markTool.getAppliances()));
} else {
    // 清屏时的处理
}
联系客服,在线咨询