6_3-互动学堂场景-状态栏
更新時間:2023-04-17 15:27:57
1 功能概述
狀態列主要包括課節號展示、當前上課狀態、課節名稱展示、網路延遲等功能。其中,上課狀態包括未上課、上課延誤、拖堂和已結束。狀態列介面封裝在 PLVHCStatusBarLayout 中。
2 使用演示
使用狀態列模組只需要在 Activity 佈局中加入 PLVHCStatusBarLayout 這個佈局,同時在佈局檔案中加入相關的佈局。
<!-- 状态栏布局 -->
<com.easefun.polyv.livehiclass.modules.statusbar.PLVHCStatusBarLayout
android:id="@+id/plvhc_status_bar_ly"
android:layout_width="match_parent"
android:layout_height="24dp"
android:background="#191A22"
app:layout_constraintTop_toTopOf="parent" />
呼叫 init 方法去初始化狀態列佈局
// 初始化状态栏布局
plvhcStatusBarLy.init(liveRoomDataManager);
可以呼叫介面中定義的方法去實現對狀態列的修改。
public interface IPLVHCStatusBarLayout {
/**
* 初始化
*
* @param liveRoomDataManager
*/
void init(IPLVLiveRoomDataManager liveRoomDataManager);
/**
* 更新为已上课状态
*/
void onLessonStart();
/**
* 更新为已下课状态
*/
void onLessonEnd();
/**
* 更新网络质量
*
* @param networkQuality
*/
void acceptNetworkQuality(int networkQuality);
/**
* 上行流量网络状态
*
* @param networkStatusVO
*/
void acceptUpstreamNetworkStatus(PLVNetworkStatusVO networkStatusVO);
/**
* 远端连麦用户网络状态
*
* @param networkStatusVO
*/
void acceptRemoteNetworkStatus(PLVNetworkStatusVO networkStatusVO);
/**
* 销毁方法
*/
void destroy();
}
3 實作介紹
PLVHCStatusBarLayout 是互動學堂場景下的狀態列佈局,實作了 IPLVHCStatusBarLayout 介面。
3.1 初始化 view 方法
PLVHCStatusBarLayout 繼承於 FrameLayout ,在構造器中使用 initView 方法對 view 進行初始化處理。
//构造器
public PLVHCStatusBarLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
//初始化方法
private void initView() {
rootView = LayoutInflater.from(getContext()).inflate(R.layout.plvhc_live_room_status_layout, this);
findView();
initStatusUpdateTimer();
}
3.2 初始化資料方法
PLVHCStatusBarLayout 的 init 方法是對外的 API,在初始化的時候呼叫一次,需要外部傳入 IPLVLiveRoomDataManager 後進行初始化。
@Override
public void init(IPLVLiveRoomDataManager liveRoomDataManager) {
this.liveRoomDataManager = liveRoomDataManager;
initLessonIdText(liveRoomDataManager);
observeLessonDataBean(liveRoomDataManager);
}
private void initLessonIdText(IPLVLiveRoomDataManager liveRoomDataManager) {
//初始化课节号信息
}
private void observeLessonDataBean(IPLVLiveRoomDataManager liveRoomDataManager) {
//监听数据变化
}
上面是初始化的方法。然後是在對外 API 中實作了介面中的方法。
3.3 狀態列 UI 的更新
透過 processUpdateLessonTimeStatus() 方法對當前的上課狀態進行判斷。結合這個判斷結果,呼叫 updateLessonTimeStatus 方法對上課狀態的 UI 進行更新。網路更新則是透過 processUpdateNetworkDelay() 來實現的。使用 adjustLessonNameTvWidth() 來適配課程名稱的寬度。
