本文将指导您如何快速集成直播列表瀑布流页,支持单列瀑布流和双列瀑布流,下拉刷新,滑动播放等功能。
效果展示
双列瀑布流 | 单列瀑布流 |
![]() |
![]() |
注意:
双列瀑布流默认同时进2个房间,会同时预览画面中间的2个直播间画面,单列瀑布流默认同时进入1个房间。
同时预览多个房间时,多个房间的预览时长都被计入观众的音视频时长。
前提条件
瀑布流视频预加载功能需要对应应用(SDKAppID)为 TUILiveKit 体验版或大规模直播版 才能使用。
功能接入
说明:
观众在直播间外预览直播内容时,其预览时长也将被计入观众的音视频时长。
步骤 1:创建并初始化瀑布流视图
您可以根据需要选择使用单列或双列瀑布流。
val mLiveListView = LiveListView(context)//双列瀑布流mLiveListView.init(this, LiveListViewDefine.Style.DOUBLE_COLUMN)//单列瀑布流mLiveListView.init(this, LiveListViewDefine.Style.SINGLE_COLUMN)
LiveListView mLiveListView = new LiveListView(this);//双列瀑布流mLiveListView.init(this, LiveListViewDefine.Style.DOUBLE_COLUMN);//单列瀑布流mLiveListView.init(this, LiveListViewDefine.Style.DOUBLE_COLUMN);
步骤 2:加载瀑布流视图
将创建的
LiveListView
加载到您的 Activity 或 Fragment 中。setContentView(mLiveListView)
setContentView(mLiveListView);
步骤 3:监听列表项点击事件
通过设置
OnItemClickListener
来监听用户点击列表项的事件,并在回调中实现跳转进入直播间的功能。mLiveListView.setOnItemClickListener { view, liveInfo ->// 这里可以实现跳转进入直播间界面enterRoom(liveInfo)}
mLiveListView.setOnItemClickListener((view, liveInfo) -> {//这里可以实现跳转进入直播间界面enterRoom(liveInfo);});
功能定制
瀑布流组件提供了灵活的接口,您可以根据业务需求自定义数据源和列表项样式。
自定义数据源
如果您的后台有单独的直播列表数据,可以通过实现
TUILiveListDataSource
接口来自定义数据源,而不使用组件默认的列表数据。val dataSource = object : TUILiveListDataSource() {override fun fetchLiveList(param: LiveListViewDefine.FetchLiveListParam,callback: LiveListViewDefine.LiveListCallback) {// 对接自己的业务后台,按照下面的格式返回数据给UI组件val liveInfoList = mutableListOf<TUILiveListManager.LiveInfo>()val liveInfo = TUILiveListManager.LiveInfo().apply {roomInfo = TUIRoomDefine.RoomInfo().apply {roomId = "live_123456"name = "live_123456"}}liveInfoList.add(liveInfo)val cursor = "aabbccdd"callback.onSuccess(cursor, liveInfoList)}}mLiveListView.init(this, LiveListViewDefine.Style.SINGLE_COLUMN, null, dataSource)
TUILiveListDataSource dataSource = new TUILiveListDataSource(){@Overridepublic void fetchLiveList(LiveListViewDefine.FetchLiveListParam param, LiveListViewDefine.LiveListCallback callback) {//对接自己的业务后台,按照下面的格式返回数据给UI组件List<TUILiveListManager.LiveInfo> liveInfoList = new ArrayList<>();TUILiveListManager.LiveInfo liveInfo = new TUILiveListManager.LiveInfo();liveInfo.roomInfo = new TUIRoomDefine.RoomInfo();liveInfo.roomInfo.roomId = "live_123456";liveInfo.roomInfo.name = "live_123456";liveInfoList.add(liveInfo);String cursor = "aabbccdd";callback.onSuccess(cursor, liveInfoList);}};mLiveListView.init(this, LiveListViewDefine.Style.SINGLE_COLUMN, null, dataSource);
自定义挂件
瀑布流列表项底部默认显示视频流画面或直播封面。如果您需要自定义列表项顶部的 UI 元素(例如主播头像、直播标题等),可以通过实现
LiveListViewAdapter
接口来完成。val liveListViewAdapter = object : LiveListViewDefine.LiveListViewAdapter() {override fun createLiveInfoView(liveInfo: TUILiveListManager.LiveInfo): View {// 自定义挂件 viewval widgetView = CustomView(context)widgetView.init(liveInfo)return widgetView}override fun updateLiveInfoView(view: View, liveInfo: TUILiveListManager.LiveInfo) {// 更新挂件 view 中绑定的数据val widgetView = view as CustomViewwidgetView.updateLiveInfoView(liveInfo)}}mLiveListView.init(this, LiveListViewDefine.Style.SINGLE_COLUMN, liveListViewAdapter, null)
LiveListViewDefine.LiveListViewAdapter liveListViewAdapter = new LiveListViewDefine.LiveListViewAdapter() {@Overridepublic View createLiveInfoView(TUILiveListManager.LiveInfo liveInfo) {//自定义挂件viewCustomView widgetView = new CustomView(mContext);widgetView.init(liveInfo);return widgetView;}@Overridepublic void updateLiveInfoView(View view, TUILiveListManager.LiveInfo liveInfo) {//更新挂件view中绑定的数据CustomView widgetView = (CustomView) view;widgetView.updateLiveInfoView(liveInfo);}};mLiveListView.init(this, LiveListViewDefine.Style.SINGLE_COLUMN, liveListViewAdapter, null);