今天主要說(shuō)的是節(jié)操視頻在多布局的狀態(tài)下自動(dòng)播放,由于布局沒(méi)有固定的規(guī)則所以不能只判斷位置來(lái)自動(dòng)播放,所以使用啦判斷子條目中的控件,而且,定義啦一個(gè)矩形的框框來(lái)判斷,如果,你的那個(gè)控件到達(dá)啦這個(gè)框框的范圍內(nèi),就開(kāi)始啦自動(dòng)播放
implementation 'fm.jiecao:jiecaovideoplayer:5.4'
正常的滑動(dòng)監(jiān)聽(tīng)
rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
//playVideo就是開(kāi)啟自動(dòng)播放的方法,另外,一般會(huì)添加一個(gè)判斷是不是wifi狀態(tài)下
if (newState == SCROLL_STATE_IDLE) playVideo(recyclerView);
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);滑動(dòng)范圍
//可以獲取屏幕中展示第一個(gè)item的position值
int firstPosition = mLayoutManager.findFirstVisibleItemPosition();
// 可以獲取屏幕中展示最后一個(gè)item的position值
int lastPosition = mLayoutManager.findLastVisibleItemPosition();
//相減就是我們當(dāng)前看到問(wèn)獲取屏幕中item的條目數(shù)
visibleCount = lastPosition - firstPosition;
}
});
private void playVideo(RecyclerView view) {
for (int i = 0; i < visibleCount; i++) {
if (view != null && view.getChildAt(i) != null && view.getChildAt(i).findViewById(R.id.re_shi_kai) != null) {
JCVideoPlayerStandard videoPlayer = view.getChildAt(i).findViewById(R.id.re_shi_kai);
Rect rect = new Rect();
//getLocalVisibleRect(Rect r)方法可以把視圖的長(zhǎng)和寬映射到一個(gè)Rect對(duì)象上。
videoPlayer.getLocalVisibleRect(rect);
int height = videoPlayer.getHeight();
if (rect.top == 0 && rect.bottom == height) {
if (videoPlayer.currentState == JCVideoPlayer.CURRENT_STATE_NORMAL || videoPlayer.currentState == JCVideoPlayer.CURRENT_STATE_ERROR) {
videoPlayer.startButton.performClick();
//這個(gè)是節(jié)操視頻自帶的開(kāi)啟方式
// videoPlayer.startVideo();
BaseApp.getmApplication().mVideoPlayer = videoPlayer;
}
return;
}
}
}
JCVideoPlayer.releaseAllVideos();
BaseApp.getmApplication().mVideoPlayer = null;
}
我的是在fragment中的多布局 所以在依附的activity暫停失去焦點(diǎn)是要將節(jié)操視頻關(guān)閉
@Override
protected void onPause() {
super.onPause();
/*
* 我的是在fragment中的多布局 所以在依附的activity暫停失去焦點(diǎn)是要將節(jié)操視頻關(guān)閉
* public static JCVideoPlayerStandard mVideoPlayer;
* mVideoPlayer是在BaseApp是需要定義個(gè)靜態(tài)的mVideoPlayer方法就行啦 為了保持在一個(gè)視頻對(duì)象
* */
if (BaseApp.mVideoPlayer != null) {
if (BaseApp.mVideoPlayer.currentState == JCVideoPlayer.CURRENT_STATE_PLAYING) {
BaseApp.mVideoPlayer.startButton.performClick();
// JCMediaManager.instance().mediaPlayer.pause();
} else if (BaseApp.mVideoPlayer.currentState == JCVideoPlayer.CURRENT_STATE_PREPARING) {
JCVideoPlayer.releaseAllVideos();
}
}
}
但是我的fragment的也是復(fù)用的所以在切換時(shí)也需要關(guān)閉啦視頻的播放
代碼和上面一樣