日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(仿头条App项目)9.视频列表页面实现

發布時間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (仿头条App项目)9.视频列表页面实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 視頻列表頁面實現
    • 效果圖
    • 相關布局
    • 功能實現
      • 引入第三方視頻庫插件
      • 從服務端獲取數據
      • 顯示
      • 滾動播放功能實現

視頻列表頁面實現

效果圖

相關布局

視頻VideoFragment頁面放一個ListView存放視頻列表

每條列表布局

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><com.volokh.danylo.video_player_manager.ui.VideoPlayerViewandroid:id="@+id/video_view"android:layout_height="match_parent"android:layout_width="match_parent"/><ImageViewandroid:background="#C00FFF"android:id="@+id/cover_image"android:layout_width="match_parent"android:layout_height="match_parent" /><TextViewandroid:text="我是標題"android:textSize="25sp"android:id="@+id/title"android:layout_width="match_parent"android:layout_height="wrap_content" /> </RelativeLayout>

功能實現

引入第三方視頻庫插件

引入三個依賴,分別是視頻管理器,視頻列表,因為依賴用到了recyclerview,所以雖然用不到,但是也要導入,否則會報錯。

從服務端獲取數據

根據服務端的數據進行解析json,用Gson插件直接快速創建存放視頻bean文件VideoData。

在MyApi中添加獲取視頻數據地址的方法getVideoData()。

請求數據

//2:獲取服務端數據@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);System.out.println("VideoFragment onActivityCreated");//retrofit ->MyApiretrofit.create(MyApi.class).getVideoData().enqueue(new Callback<VideoData>() {@Overridepublic void onResponse(Call<VideoData> call, Response<VideoData> response) {try {System.out.println("VideoFragment onResponse");System.out.println(response.body().data);//jsonsetDataToListView(response.body().data);//# 1:滾動播放列表中心的視頻initCalculator();//# 6:添加滾動監聽器onListViewScroll();initIndex();} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onFailure(Call<VideoData> call, Throwable t) {Toast.makeText(getContext(), "網絡異常", Toast.LENGTH_SHORT).show();}});}

顯示

編寫setDataToListView方法顯示視頻列表

//3:顯示private void setDataToListView(VideoData.VideoBean data) {if(listView!=null){//做一個數據的轉換 VlistBean->MyVideoItemfor(VideoData.VideoBean.VlistBean video: data.vlist){list.add(new MyVideoItem(getContext(),getVideoManager(),video));}//創建適配器//#視頻列表:1:添加適配器//參1:播放管理者 參2:上下文VideoListViewAdapter adapter=new VideoListViewAdapter(getVideoManager(),getContext(),list);//設置適配器listView.setAdapter(adapter);}}

這時顯示的還只是文字和覆蓋的圖片,還沒有播放功能,下面是滾動播放功能。

滾動播放功能實現

初始化列表索引

@Overridepublic void onResume() {super.onResume();System.out.println("VideoFragment onResume");initIndex();}private void initIndex() {if(!list.isEmpty()){listView.post(new Runnable() {@Overridepublic void run() {//由坐標得到item的位置positionmListItemVisibilityCalculator.onScrollStateIdle(mItemsPositionGetter,listView.getFirstVisiblePosition(),listView.getLastVisiblePosition());}});}}

計算處于列表中間的條目是哪個

private ListItemsVisibilityCalculator mListItemVisibilityCalculator;//# 2:Getter可以獲取視頻的positionprivate ItemsPositionGetter mItemsPositionGetter;/*# 3:將坐標轉成position記錄列表滾動的狀態SCROLL_STATE_IDLE:列表停住*/private int mScrollState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE;private void initCalculator() {/*** 5:用于計算處于列表中間的條目是哪個。* 暫停其他視頻,播放當前視頻*/mListItemVisibilityCalculator =new SingleListViewItemActiveCalculator(new DefaultSingleItemCalculatorCallback(), list);mItemsPositionGetter = new ListViewItemPositionGetter(listView);}

滾動播放

private void onListViewScroll() {listView.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// # 6 :記錄狀態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()) {//計算可見item的坐標System.out.println("mListItemVisibilityCalculator="+mListItemVisibilityCalculator);System.out.println("mItemsPositionGetter="+mItemsPositionGetter);mListItemVisibilityCalculator.onScroll(mItemsPositionGetter, firstVisibleItem, visibleItemCount, mScrollState);}}});}

當頁面處于后臺時,那么停止播放

@Overridepublic void onStop() {super.onStop();// 如果頁面處于后臺,那么停止播放playerManager.resetMediaPlayer();}

總結

以上是生活随笔為你收集整理的(仿头条App项目)9.视频列表页面实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。