概述
Android 结合GSYVideoPlayer视频在列表里面自动播放
前言:今天没啥事情做然后写一个视频在列表上面滚动自动播放的功能,这也是工作中用到的,也可以在这里做下记录。我这里是结合的GSYVideoPlayer这个播放的框架
这个地方我只记录核心的代码 其余代码因为工作项目中用到说以不会放出来
这个是一个自动播放的管理类
public class AutoPlayUtils {
public static int positionInList = -1;//记录当前播放列表位置
private AutoPlayUtils() {
}
/**
* @param firstVisiblePosition 首个可见item位置
* @param lastVisiblePosition 最后一个可见item位置
*/
public static void onScrollPlayVideo(RecyclerView recyclerView, int jzvdId, int firstVisiblePosition, int lastVisiblePosition) {
if (JZUtils.isWifiConnected(recyclerView.getContext())) {
for (int i = 0; i <= lastVisiblePosition - firstVisiblePosition; i++) {
View child = recyclerView.getChildAt(i);
View view = child.findViewById(jzvdId);
if (view != null && view instanceof Jzvd) {
Jzvd player = (Jzvd) view;
if (getViewVisiblePercent(player) == 1f) {
if (positionInList != i + firstVisiblePosition) {
player.startButton.performClick();
}
break;
}
}
}
}
}
/**
* @param firstVisiblePosition 首个可见item位置
* @param lastVisiblePosition 最后一个可见item位置
* @param percent 当item被遮挡percent/1时释放,percent取值0-1
*/
public static void onScrollReleaseAllVideos(int firstVisiblePosition, int lastVisiblePosition, float percent) {
if (Jzvd.CURRENT_JZVD == null) return;
if (positionInList >= 0) {
if ((positionInList <= firstVisiblePosition || positionInList >= lastVisiblePosition - 1)) {
if (getViewVisiblePercent(Jzvd.CURRENT_JZVD) < percent) {
Jzvd.releaseAllVideos();
}
}
}
}
/**
* @param view
* @return 当前视图可见比列
*/
public static float getViewVisiblePercent(View view) {
if (view == null) {
return 0f;
}
float height = view.getHeight();
Rect rect = new Rect();
if (!view.getLocalVisibleRect(rect)) {
return 0f;
}
float visibleHeight = rect.bottom - rect.top;
return visibleHeight / height;
}
做这个东西其实最主要的还是和recycleview有关系,基本上的逻辑判断我们都会写在recycleview的监听里面
recycleView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
@Override
public void onChildViewAttachedToWindow(View view) {
}
@Override
public void onChildViewDetachedFromWindow(View view) {
JzvdStdVolumeAfterFullscreen jzvd = view.findViewById(R.id.video_bg_w);
if (jzvd != null && Jzvd.CURRENT_JZVD != null && jzvd.jzDataSource != null && Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl() != null &&
jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl())) {
if (Jzvd.CURRENT_JZVD != null && Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) {
Jzvd.releaseAllVideos();
}
}
}
});
recycleView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
switch (newState) {
case RecyclerView.SCROLL_STATE_SETTLING:
//滑动状态
break;
case RecyclerView.SCROLL_STATE_IDLE:
AutoPlayUtils.onScrollPlayVideo(recyclerView, R.id.video_bg_w,
manager.findFirstVisibleItemPosition(),
manager.findLastVisibleItemPosition());
break;
case RecyclerView.SCROLL_STATE_DRAGGING:
//拖动状态
break;
default:
break;
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//自动播放
if (dy != 0) {
AutoPlayUtils.onScrollReleaseAllVideos(manager.findFirstVisibleItemPosition(),
manager.findLastVisibleItemPosition(), 0.2f);
}
}
});
这样就欧克了,这篇不是太详细 但是核心代码已经贴上去了 ,有什么问题可以留言!!
最后
以上就是沉静白昼为你收集整理的Android 结合GSYVideoPlayer视频在列表里面自动播放的全部内容,希望文章能够帮你解决Android 结合GSYVideoPlayer视频在列表里面自动播放所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复