6_3-互动学堂场景-状态栏
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()
来适配课程名的宽度。
Last updated
Was this helpful?