多布局状态下视频自动播放
2019-05-07 本文已影响0人
君袅
今天主要说的是节操视频在多布局的状态下自动播放,由于布局没有固定的规则所以不能只判断位置来自动播放,所以使用啦判断子条目中的控件,而且,定义啦一个矩形的框框来判断,如果,你的那个控件到达啦这个框框的范围内,就开始啦自动播放
implementation 'fm.jiecao:jiecaovideoplayer:5.4'
正常的滑动监听
rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
//playVideo就是开启自动播放的方法,另外,一般会添加一个判断是不是wifi状态下
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);滑动范围
//可以获取屏幕中展示第一个item的position值
int firstPosition = mLayoutManager.findFirstVisibleItemPosition();
// 可以获取屏幕中展示最后一个item的position值
int lastPosition = mLayoutManager.findLastVisibleItemPosition();
//相减就是我们当前看到问获取屏幕中item的条目数
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)方法可以把视图的长和宽映射到一个Rect对象上。
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();
//这个是节操视频自带的开启方式
// videoPlayer.startVideo();
BaseApp.getmApplication().mVideoPlayer = videoPlayer;
}
return;
}
}
}
JCVideoPlayer.releaseAllVideos();
BaseApp.getmApplication().mVideoPlayer = null;
}
我的是在fragment中的多布局 所以在依附的activity暂停失去焦点是要将节操视频关闭
@Override
protected void onPause() {
super.onPause();
/*
* 我的是在fragment中的多布局 所以在依附的activity暂停失去焦点是要将节操视频关闭
* public static JCVideoPlayerStandard mVideoPlayer;
* mVideoPlayer是在BaseApp是需要定义个静态的mVideoPlayer方法就行啦 为了保持在一个视频对象
* */
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的也是复用的所以在切换时也需要关闭啦视频的播放
代码和上面一样