最近在做视频闪屏页,但是遇到了一个困难
VideoView播放视频的时候会出现黑屏,能够清晰看到黑色的屏幕,很不美观
照惯例,遇到问题先看有没有网友解决过,发现了几篇博客
Android VideoView播放本地视频短暂黑屏的解决方法
android videoview 播放前黑屏的解决方法之一
但是两个博客都没有能解决我的问题,第一篇博客提到的onInfo里面的回调其实是渲染完成的回调,但是忽略个问题:视频渲染完成,那么就可以直接播放了吗?
所以我再次想了下,播放之前黑屏的原因不在于缓冲的多少?而是在于缓冲完毕之后什么时候开始播放?黑屏就是黑在渲染完毕了但是还没有播放视频呢
所以根据第二篇博客的启发,我们可以这样搞:
在VideoView上面盖一层View,当视频开始播放的时候(注意不是缓冲完毕)再把View隐藏掉,如何判断视频已经开始播放了呢?利用Runnable+Handler
代码如下:
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer = mp;
videoView.start();
mVideoViewHandler.post(runable_play);
}
});
runable_play= new Runnable() {
@Override
public void run() {
if(mediaPlayer!=null&&mediaPlayer.getCurrentPosition()>0){
test_img.setVisibility(View.GONE);
}
if(test_img.getVisibility()==View.GONE){
runable_play = null;
mVideoViewHandler = null;
}else {
mVideoViewHandler.postDelayed(runable_play, 0);
}
}
};