关于Android开发的那些事儿

Android VideoView 播放黑屏

2016-10-25  本文已影响2212人  weiyushuai

最近的项目引导页播放视频


项目遇到启动图片之后紧接着播放一段宣传公司的视频。
本以为使用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);
}

好了,先记录一下,也许不是最合适的。以后有其他方法在记录。

上一篇下一篇

猜你喜欢

热点阅读