【Android视频 之 阿里云视频播放器 二】

说明一下:写文章时,我用的最新sdk版本是 4.7.0 哦,这里也只贴出关键代码,更多详细代码在文章末尾有地址链接的。

【Android视频 之 阿里云视频播放器 一】

1 视频试看功能的实现

效果图:
在这里插入图片描述

4.7.0的版本的demo中并没有完整的实现视频试看的功能,这里结合自己理解,完善了一下该功能。
关键代码如下:
在AliyunVodPlayerView 类中新增的方法:

/**
     * 试看view 袁培凯 add
     *
     * @param isStartTrailer
     * @param trailerDuration 单位:毫秒
     */
    public void startTrailersView(boolean isStartTrailer, int trailerDuration) {
        this.isStartTrailer = isStartTrailer;
        this.trailerDuration = trailerDuration;
        trailersView = new TrailersView(getContext());
        //trailersView.startTrailer();
        trailersView.hideAll();
        addSubView(trailersView);
    }

    /**
     * 关闭试看 袁培凯 add
     */
    public void trailersClosed() {
        this.isStartTrailer = false;
        if (trailersView != null) {
            trailersView.hideAll();
            start();
        }
    }

在mControlView.setOnSeekListener中,onProgressChanged回调监听中的添加如下:

  @Override
            public void onProgressChanged(int progress, boolean fromUser) {
                if (fromUser) {
                    requestBitmapByPosition(progress);
                }
                if (isStartTrailer && progress > trailerDuration) {
                    pause();
                    trailersView.endTrailer();
                    trailersView.setCurrentProgress(true);

                    mControlView.setVideoPosition(trailerDuration);
                    requestBitmapByPosition(trailerDuration);
                }
            }

//开启试看,并且试看30秒

 mAliyunVodPlayerView.startTrailersView(true, 1 * 30 * 1000);

2 防淘宝列表滑动,视频小窗口播放的功能实现

效果图:
在这里插入图片描述

实现思路:

  1. 监听滑动布局,滚动的高度 大于 视频的高度时
  2. 动态添加小窗口布局,移除顶部的视频播放布局
  3. 为了不让总布局的高度发生变化,移除顶部的视频播放布局时,动态添加一个同样高度的view。
  4. 滚动的高度 小于 视频的高度时,反过来就可以啦!

关键代码如下:

        mNestedScrollView.addOnScrollChangedListener(new CustomNestedScrollView.OnScrollChangedListener() {
            @Override
            public void scrollChangedListener(int y) {
                if (y >= videoPlayHeight) {//顶部播放器不可见了
                    if (!isSmallVideoDisplay) {

                        isSmallVideoDisplay = true;
                        mAliyunVodPlayerView.setControlBarCanShow(false);
                        mLinearLayout.post(new Runnable() {
                            @Override
                            public void run() {
                                mLinearLayout.removeView(mAliyunVodPlayerView);
                                mLinearLayout.addView(mView, 0, new FrameLayout.LayoutParams(0, videoPlayHeight));

                                layoutParamsSmallVideo = new FrameLayout.LayoutParams(smallVideoHeight, smallVideoHeight);
                                layoutParamsSmallVideo.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT;
                                layoutParamsSmallVideo.rightMargin = 20;
                                mFrameLayout.addView(mAliyunVodPlayerView, layoutParamsSmallVideo);

                            }
                        });
                    }
                } else {
                    if (isSmallVideoDisplay) {
                        isSmallVideoDisplay = false;
                        mAliyunVodPlayerView.setControlBarCanShow(true);
                        mFrameLayout.post(new Runnable() {
                            @Override
                            public void run() {
                                mFrameLayout.removeView(mAliyunVodPlayerView);

                                mLinearLayout.removeView(mView);
                                mLinearLayout.addView(mAliyunVodPlayerView, 0, layoutParams);
                            }
                        });
                    }
                }
            }
        });

码云源码地址

发布了82 篇原创文章 · 获赞 131 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/da_caoyuan/article/details/100008866