Android VideoView 播放黑屏

作者: weiyushuai | 来源:发表于2016-10-25 12:02 被阅读2212次

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


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

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

    相关文章

      网友评论

      本文标题:Android VideoView 播放黑屏

      本文链接:https://www.haomeiwen.com/subject/grbhettx.html