自定义节操视频播放界面(二)

CustomJCVideo

需求

  • 预览
  • 视频播放完成后显示某些东西

思路

  • 找到更新seekBar的源头并进行监听
  • 上一篇有说因是Gradle管理jar包 所以我们无法修改源码
  • 而通读JCVideoPlayer源码 我悲催的发现并没有关于监听播放进度的实现 接下来就要自己整了 : )

实现

  • 首先我们需要去这里下载源码并以依赖库的形式导入项目
  • 接着我们打开JCVideoPlayer找到
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ProgressTimerTask extends TimerTask {
@Override
public void run() {
if (currentState == CURRENT_STATE_PLAYING || currentState == CURRENT_STATE_PAUSE || currentState == CURRENT_STATE_PLAYING_BUFFERING_START) {
int position = getCurrentPositionWhenPlaying();
int duration = getDuration();

mHandler.post(new Runnable() {
@Override
public void run() {
setTextAndProgress(JCMediaManager.instance().bufferPercent);
}
});
}
}
}
  • 以上便是控制seekBar的时间控制器 而且其中已经给出了position和duration两个参数 前者为播放进度 后者为视频长度 我们将其回调出即可

  • 在依赖库中创建一个名为JCVideoProgressListener的回调接口

    1
    2
    3
    4
    5
    public interface JCVideoProgressListener {
    void onProgress(int duration, int progress);

    void onVideoComplete(); //监听播放完成
    }
  • 接着在JCVideoPlayer中定义一个方法

    1
    2
    3
    public void setOnJCPlayingProgressListener(JCVideoProgressListener listener) {
    this.playingProgressListener = listener;
    }
  • 然后把该监听用在ProgressTimerTask即可

    if (playingProgressListener!=null)
    playingProgressListener.onProgress(duration, position);

  • 最后在activity实现即可(PREVIEW = 15 * 1000)

    1
    2
    3
    4
    5
    6
    7
    @Override
    public void onProgress(int duration, int progress) {
    Log.e(TAG, "onProgress: " + duration + " ---- " + progress);
    if (duration >= PREVIEW && progress >= PREVIEW) {
    handler.sendEmptyMessage(0);
    }
    }
  • 播放完成的操作在回调onVideoComplete即可

注:

  • 回调回来的进度与长度是在子线程中的 这里使用的Handler : )

点这里查看demo