最近的项目引导页播放视频
项目遇到启动图片之后紧接着播放一段宣传公司的视频。
本以为使用videoview播放视频就完事了,结果闪屏结束后播放视频中间会有短暂的黑屏。然后我调试啊!发现是videoview绘制的时候会把所有布局清空。
使用videoview播放视屏需要我们在封装一下,不然无法全屏播放
public class SplashVideoView extends VideoView {
public SplashVideoView(Context context) {
super(context);
}
public SplashVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SplashVideoView(Context context, AttributeSet attrs, int
defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int
heightMeasureSpec) {
//我们重新计算高度
int width = getDefaultSize(0, widthMeasureSpec);
int height = getDefaultSize(0, heightMeasureSpec);
setMeasuredDimension(width, height);
}
@Override public void
setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
super.setOnPreparedListener(l);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
}
直接进入正题
//播放完毕进入主界面
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
//播放完毕进入主界面
skipToNext();
}
解决闪屏后黑屏问题,两种方法。根据情况使用 也可结合使用。
方法1 ,这种方法需要在xml中给video view添加背景图片,也就是闪屏结束后过度的图片
/**
* 主要解决个别手机出现短暂的黑屏问题
*/
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
// video 视屏播放的时候把背景设置为透明
videoView.setBackgroundColor(Color.TRANSPARENT);
return true;
}
return false;
}
方法2
/** * 视频淡入动画,此动画是为了解决引导图后和视频播放之间出现短暂的黑屏 */
private void startVideoAnnimation() {
Animation fadeInAnim = AnimationUtils.loadAnimation(this,
R.anim.video_scale);
fadeInAnim.setDuration(600);
videoView.startAnimation(fadeInAnim);
}
好了,先记录一下,也许不是最合适的。以后有其他方法在记录。
网友评论