保利威文档中心

幫助中心

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 初始化資料方法

PLVHCStatusBarLayoutinit 方法是對外的 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() 來適配課程名稱的寬度。

联系客服,在线咨询