(仿头条App项目)9.视频列表页面实现
生活随笔
收集整理的這篇文章主要介紹了
(仿头条App项目)9.视频列表页面实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 視頻列表頁面實(shí)現(xiàn)
- 效果圖
- 相關(guān)布局
- 功能實(shí)現(xiàn)
- 引入第三方視頻庫(kù)插件
- 從服務(wù)端獲取數(shù)據(jù)
- 顯示
- 滾動(dòng)播放功能實(shí)現(xiàn)
視頻列表頁面實(shí)現(xiàn)
效果圖
相關(guān)布局
視頻VideoFragment頁面放一個(gè)ListView存放視頻列表
每條列表布局
功能實(shí)現(xiàn)
引入第三方視頻庫(kù)插件
引入三個(gè)依賴,分別是視頻管理器,視頻列表,因?yàn)橐蕾囉玫搅藃ecyclerview,所以雖然用不到,但是也要導(dǎo)入,否則會(huì)報(bào)錯(cuò)。
從服務(wù)端獲取數(shù)據(jù)
根據(jù)服務(wù)端的數(shù)據(jù)進(jìn)行解析json,用Gson插件直接快速創(chuàng)建存放視頻bean文件VideoData。
在MyApi中添加獲取視頻數(shù)據(jù)地址的方法getVideoData()。
請(qǐng)求數(shù)據(jù)
顯示
編寫setDataToListView方法顯示視頻列表
//3:顯示private void setDataToListView(VideoData.VideoBean data) {if(listView!=null){//做一個(gè)數(shù)據(jù)的轉(zhuǎn)換 VlistBean->MyVideoItemfor(VideoData.VideoBean.VlistBean video: data.vlist){list.add(new MyVideoItem(getContext(),getVideoManager(),video));}//創(chuàng)建適配器//#視頻列表:1:添加適配器//參1:播放管理者 參2:上下文VideoListViewAdapter adapter=new VideoListViewAdapter(getVideoManager(),getContext(),list);//設(shè)置適配器listView.setAdapter(adapter);}}這時(shí)顯示的還只是文字和覆蓋的圖片,還沒有播放功能,下面是滾動(dòng)播放功能。
滾動(dòng)播放功能實(shí)現(xiàn)
初始化列表索引
@Overridepublic void onResume() {super.onResume();System.out.println("VideoFragment onResume");initIndex();}private void initIndex() {if(!list.isEmpty()){listView.post(new Runnable() {@Overridepublic void run() {//由坐標(biāo)得到item的位置positionmListItemVisibilityCalculator.onScrollStateIdle(mItemsPositionGetter,listView.getFirstVisiblePosition(),listView.getLastVisiblePosition());}});}}計(jì)算處于列表中間的條目是哪個(gè)
private ListItemsVisibilityCalculator mListItemVisibilityCalculator;//# 2:Getter可以獲取視頻的positionprivate ItemsPositionGetter mItemsPositionGetter;/*# 3:將坐標(biāo)轉(zhuǎn)成position記錄列表滾動(dòng)的狀態(tài)SCROLL_STATE_IDLE:列表停住*/private int mScrollState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE;private void initCalculator() {/*** 5:用于計(jì)算處于列表中間的條目是哪個(gè)。* 暫停其他視頻,播放當(dāng)前視頻*/mListItemVisibilityCalculator =new SingleListViewItemActiveCalculator(new DefaultSingleItemCalculatorCallback(), list);mItemsPositionGetter = new ListViewItemPositionGetter(listView);}滾動(dòng)播放
private void onListViewScroll() {listView.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// # 6 :記錄狀態(tài)mScrollState = scrollState;if (scrollState == SCROLL_STATE_IDLE && !list.isEmpty()) { //停止mListItemVisibilityCalculator.onScrollStateIdle(mItemsPositionGetter, view.getFirstVisiblePosition(), view.getLastVisiblePosition());}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {if (!list.isEmpty()) {//計(jì)算可見item的坐標(biāo)System.out.println("mListItemVisibilityCalculator="+mListItemVisibilityCalculator);System.out.println("mItemsPositionGetter="+mItemsPositionGetter);mListItemVisibilityCalculator.onScroll(mItemsPositionGetter, firstVisibleItem, visibleItemCount, mScrollState);}}});}當(dāng)頁面處于后臺(tái)時(shí),那么停止播放
@Overridepublic void onStop() {super.onStop();// 如果頁面處于后臺(tái),那么停止播放playerManager.resetMediaPlayer();}總結(jié)
以上是生活随笔為你收集整理的(仿头条App项目)9.视频列表页面实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (Java多线程)线程状态
- 下一篇: (网络编程)TCP实现文件上传