Android短視頻滑動播放(二)



Android短視頻滑動播放(一)
上一篇文章中講到了短視頻滑動的基本實現,文末也給出了相應的例子,可以運行查看,本節進一步完善滑動處理內容,主要給出了數據更新內容,下拉刷新最新內容,上拉預加載,可不斷向下滑動;同時,介紹了視頻的暫停、繼續處理,循環播放或自動滑動到下一條以及多布局的處理。

1. 數據刷新

內容刷新布局采用了SwipeRefreshLayout,實現經典式的下拉刷新控制。

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/srf_video_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_little_video"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

模擬數據請求,定義isLoadMoreData判斷是刷新數據還是加載更多內容,isLoadingData判斷是否正在加載數據,防止數據重復請求;

/**
 * 數據請求
 */
private void requestNewData() {
    if (!isLoadMoreData) {
        mRefreshView.setRefreshing(true);
    }

    isLoadingData = true;

    // 模擬網絡請求,2秒后進行數據返回
    Log.e("PageIndex", String.valueOf(mLastProductIndex));
    mHandler.sendEmptyMessageDelayed(0, 2000);

}

Handler接收到消息,模擬接收到網絡請求返回數據信息,進行數據更新;

/**
 * 模擬網絡請求完畢,數據更新
 */
Handler mHandler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(@NonNull Message msg) {
        onVideoListUpdate(VideoBean.getTikTokVideoList());
        return false;
    }
});

數據更新,如果是刷新,則重新設置適配器內容,如果是記載更多則往適配器結合中加入更多數據內容。

/**
 * 數據更新
 *
 * @param videoList 網絡回調獲取數據
 */
public void onVideoListUpdate(List<VideoBean> videoList) {
    isEnd = videoList == null || videoList.size() < 10;
    isLoadingData = false;
    if (mRefreshView != null && mRefreshView.isRefreshing()) {
        mRefreshView.setRefreshing(false);
    }
    if (videoList == null) {
        return;
    }
    mLastProductIndex += videoList.size();
    if (isLoadMoreData) {
        // 加載更多數據
        if (mLittleVideoAdapter != null) {
            mLittleVideoAdapter.addData(videoList);
        }
    } else {
        // 刷新數據
        isEnd = false;
        mLittleVideoAdapter.setNewData(videoList);
    }
}

2. 預加載調用

打開APP是請求數據內容,初始化時候,會展示SwipeRefreshLayout圓圈,請求完畢,進行數據展示;上拉刷視頻時候,我們要提前加載適配器內容,減少用戶等待時間,實現預加載。上一篇文章中講到頁面滑動后,會調用onPageSelected()方法,我們在播放視頻前,進行判斷是否需要加載更多視頻,進行數據請求。

 * 頁面附着,內容展示
 *
 * @param position 子布局在RecyclerView位置
 * @param isLast   是否最后一個
 */
@Override
public void onPageSelected(int position, boolean isLast) {
    if (mCurrentPosition == position && mLastStopPosition != position) {
        return;
    }

    // 預加載,請求數據內容
    int itemCount = mLittleVideoAdapter.getItemCount();
    if (itemCount - position < DEFAULT_PRELOAD_NUMBER && !isLoadingData && !isEnd) {
        // 正在加載中, 防止網絡太慢或其他情況造成重復請求列表
        isLoadMoreData = true;
        isLoadingData = true;
        requestNewData();
    }
    if (itemCount == position + 1 && isEnd) {
        Toast.makeText(MainActivity.this, "No more video.", Toast.LENGTH_SHORT).show();
    }
    startPlay(position);
    mCurrentPosition = position;
}

3. 暫停、繼續播放視頻

對於視頻的暫停、播放,在空布局的播放器中加入播放按鈕,初始化播放器時對布局點擊事件進行處理,判斷如果正在播放,點擊暫停並顯示按鈕;反之,則進行播放,隱藏按鈕,還可設置。

 private void init() {
    mTextureViewContainer.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (getGSYVideoManager().isPlaying()) {
                getGSYVideoManager().pause();
                mStartButton.setVisibility(View.VISIBLE);
            } else {
                getGSYVideoManager().start();
                mStartButton.setVisibility(View.GONE);
            }
        }
    });
}

4. 循環、自動滑動視頻播放

如果想要循環,則播放完畢后重新播放,或者設置播放器的循環播放參數為true即可;如若想自動滑動播放下一條視頻,則對視頻播放回調的事件中監聽完成事件,結合RecyclerView的滑動事件即可完成。

@Override
public void onAutoComplete(String url, Object... objects) {
    super.onAutoComplete(url, objects);

    if (!isLoopPlay) {
        if (mCurrentPosition + 1 < mLittleVideoAdapter.getItemCount() ) {
            mRvLittleVideo.smoothScrollToPosition(mCurrentPosition + 1);
        }
    }

}

想要左右滑動,則可以將內容放到Fragment中,主頁面采用ViewPager進行處理,就可以上下切換視頻,左右切換其它頁面;如果想要滑動視頻中增加其它內容,對適配器進行多布局處理就可以了,推薦一款強大靈活的RecyclerAdapte:BaseRecyclerViewAdapterHelper,本例子中也同樣使用的是這個,十分強大,用起來極為方便。

關於短視頻滑動播放例子暫且到此,供大家參考使用,效果圖如下:

短視頻.gif

源碼實現:https://github.com/MickJson/LittleVideo

歡迎關注公眾號:幾圈年輪,查看更多有趣的技術、工具、閑言、資源。
公眾號.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM