6_4-互动学堂场景-工具栏
更新時間:2023-04-17 15:27:57
1 功能概述
工具列模組是互動學堂的基礎功能之一,分為講師檢視和學生檢視。該模組支援對攝影機、麥克風、畫筆等工具的參數設定。工具列模組可以增加課堂的互動方式,促進學員與講師之間更有效率的溝通。
2 使用演示
在 demo 中的 PLVHCLiveHiClassActivity 介面中,對該模組的使用介紹如下。
// 工具栏布局
private IPLVHCToolBarLayout plvhcToolBarLy;
//findView()
plvhcToolBarLy = findViewById(R.id.plvhc_tool_bar_ly);
// 初始化工具栏布局,initView()
plvhcToolBarLy.init(liveRoomDataManager);
// 初始化连麦的媒体配置
boolean isOpenMic = getIntent().getBooleanExtra(EXTRA_IS_OPEN_MIC, true);
boolean isOpenCamera = getIntent().getBooleanExtra(EXTRA_IS_OPEN_CAMERA, true);
boolean isFrontCamera = getIntent().getBooleanExtra(EXTRA_IS_FRONT_CAMERA, true);
//...
plvhcToolBarLy.initDefaultMediaStatus(!isOpenMic, !isOpenCamera, isFrontCamera);
3 接口介紹
在互動學堂場景下,IPLVHCToolBarLayout 針對工具列佈局進行介面定義,主要包含:
1、外部直接呼叫的方法
2、需要外部回應的互動事件監聽器
public interface IPLVHCToolBarLayout {
/**
* 初始化
*
* @param liveRoomDataManager 直播间数据管理器
*/
void init(IPLVLiveRoomDataManager liveRoomDataManager);
/**
* 处理图片选择结果
*
* @param data 数据
*/
void handleImgSelectResult(Intent data);
/**
* 设置view交互事件监听器
*
* @param listener 监听器
*/
void setOnViewActionListener(OnViewActionListener listener);
/**
* 初始化默认的媒体状态
*
* @param isMuteAudio 是否禁用麦克风
* @param isMuteVideo 是否禁用摄像头
* @param isFrontCamera 是否是前置摄像头
*/
void initDefaultMediaStatus(boolean isMuteAudio, boolean isMuteVideo, boolean isFrontCamera);
/**
* 课节准备中
*/
void onLessonPreparing(long serverTime, long lessonStartTime);
/**
* 课节开始
*/
void onLessonStarted();
/**
* 课节结束
*/
void onLessonEnd(long inClassTime);
/**
* 调整布局
*/
void adjustLayout();
/**
* 接收用户举手变化
*
* @param raiseHandCount 举手数量
* @param isRaiseHand 是否举手
*/
void acceptUserRaiseHand(int raiseHandCount, boolean isRaiseHand);
/**
* 接收我的画笔权限变化
*
* @param isHasPaint
*/
void acceptHasPaintToMe(boolean isHasPaint);
/**
* 更新标注工具按钮状态
*
* @param showUndoButton 是否显示撤销按钮
* @param showDeleteButton 是否显示删除按钮
*/
void changeMarkToolState(boolean showUndoButton, boolean showDeleteButton);
/**
* 获取成员列表布局的连麦View
*
* @return linkMicView
*/
IPLVMultiRoleLinkMicContract.IMultiRoleLinkMicView getMemberLayoutLinkMicView();
/**
* 获取设置布局的连麦View
*
* @return linkMicView
*/
IPLVMultiRoleLinkMicContract.IMultiRoleLinkMicView getSettingLayoutLinkMicView();
/**
* 是否拦截返回事件
*
* @return true:拦截,false:不拦截
*/
boolean onBackPressed();
/**
* 销毁,释放资源
*/
void destroy();
/**
* view交互事件监听器
*/
interface OnViewActionListener {
/**
* 发送举手事件
*
* @param raiseHandTime 举手时间
*/
void onSendRaiseHandEvent(int raiseHandTime);
/**
* 全屏控制
*
* @param isFullScreen true:全屏,false:退出全屏
*/
void onFullScreenControl(boolean isFullScreen);
/**
* 初始化上课下课按钮后回调
*
* @param classImageView 上下课按钮
*/
void onInitClassImageView(View classImageView);
/**
* 上课
*
* @param listener 监听器
*/
void onStartLesson(IPLVDataRequestListener<String> listener);
/**
* 下课
*
* @param listener 监听器
*/
void onStopLesson(IPLVDataRequestListener<String> listener);
/**
* 切换标注工具
*
* @param newMarkTool 新的工具
*/
void onRequestChangeDocumentMarkTool(PLVHCMarkToolEnums.MarkTool newMarkTool);
/**
* 切换标注工具颜色
*
* @param newColor 新的颜色
*/
void onRequestChangeDocumentColor(PLVHCMarkToolEnums.Color newColor);
/**
* 撤销画笔操作
*/
void onRequestUndo();
/**
* 删除标注内容
*/
void onRequestDelete();
}
}
4 實作介紹
在 PLVHCToolBarLayout 工具列佈局中,實作了 IPLVHCToolBarLayout 的介面。
該佈局包含的元素有:聊天室、成員列表、設定、文件管理等相關介面的佈局。
下面介紹該佈局中涉及的主要方法。
4.1 初始化 view 方法
PLVHCToolBarLayout 繼承自 FramLayout,在建構子中使用 initView() 方法對 view 進行初始化處理。
//构造器
public PLVHCToolBarLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
//initView()方法
private void initView() {
LayoutInflater.from(getContext()).inflate(R.layout.plvhc_toolbar_layout, this);
initChatroomLayout();
initMemberLayout();
initSettingLayout();
initPptListLayout();
}
4.2 初始化資料方法
由於使用者類型有兩種——講師和學生,因此在初始化資料時需要判斷使用者類型。方法在對外 API 中。除此之外,這裡還初始化了標註工具控制條佈局。
//PLVHCToolBarLayout.java
@Override
public void init(IPLVLiveRoomDataManager liveRoomDataManager) {
String userType = liveRoomDataManager.getConfig().getUser().getViewerType();
if (PLVSocketUserConstant.USERTYPE_TEACHER.equals(userType)) {
initTeacherLayout();
} else {
initStudentLayout();
}
chatroomLayout.init(liveRoomDataManager);
//register after init
chatroomLayout.getChatroomPresenter().registerView(memberLayout.getChatroomView());
chatroomLayout.getChatroomPresenter().requestKickUsers();
plvhcToolbarMarkToolControllerLayout.init(liveRoomDataManager);
}
在外部 API 中實作了 IPLVHCToolBarLayout 的介面。這裡就不一一列舉,僅列舉部分作為參考。
//PLVHCToolBarLayout.java
@Override
public void onLessonPreparing(long serverTime, long lessonStartTime) {
if (plvhcToolbarClassIv != null) {
plvhcToolbarClassIv.setSelected(false);
isClassButtonEnable = true;
}
if (plvhcToolbarStudentHandsUpLy != null) {
plvhcToolbarStudentHandsUpLy.setVisibility(View.INVISIBLE);
}
chatroomLayout.onLessonPreparing(serverTime, lessonStartTime);
}
//......
5 子目錄介紹
5.1 enums 目錄
這裡面列舉了標註工具用到的一些常數,包括標註工具顯示、標註工具類型以及標註工具顏色。
| 具體列舉資料 | |
|---|---|
| 標註工具顯示 | 隱藏、顯示標註工具列表、顯示標註工具顏色 |
| 標註工具類型 | 畫板移動工具、畫板選取工具、鉛筆(自由畫線)工具、箭頭工具、文字工具、橡皮擦工具、清屏 |
| 標註工具顏色 | 紅、藍、綠、黃、黑、白 |
5.2 widget 目錄
這是標註工具自訂的控制佈局。包括對標註工具的初始化、顯示、隱藏以及點擊事件回應等。
