我是靠谱客的博主 沉静白昼,最近开发中收集的这篇文章主要介绍Android 结合GSYVideoPlayer视频在列表里面自动播放,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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视频在列表里面自动播放所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部