Android VideoView black screen

前端 未结 22 2126
清歌不尽
清歌不尽 2020-11-27 12:55

I have been looking for a way to get rid of the nasty black initial screen on a VideoView before the start() method is run.

I have tried with background image on the

22条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-27 13:27

    By extending a TextureView, I get no black screens in the beginning or end. This is if you want to avoid using ZOrderOnTop(true).

    public class MyVideoView extends TextureView implements TextureView.SurfaceTextureListener {
      private MediaPlayer mMediaPlayer;
      private Uri mSource;
      private MediaPlayer.OnCompletionListener mCompletionListener;
      private boolean isLooping = false;
    
    
      public MyVideoView(Context context) {
          this(context, null, 0);
      }
    
      public MyVideoView(Context context, AttributeSet attrs) {
          this(context, attrs, 0);
      }
    
      public MyVideoView(Context context, AttributeSet attrs, int defStyle) {
          super(context, attrs, defStyle);
          setSurfaceTextureListener(this);
      }
    
      public void setSource(Uri source) {
          mSource = source;
      }
    
      public void setOnCompletionListener(MediaPlayer.OnCompletionListener listener) {
          mCompletionListener = listener;
      }
    
      public void setLooping(boolean looping) {
         isLooping = looping;
      }
    
      @Override
      protected void onDetachedFromWindow() {
         // release resources on detach
         if (mMediaPlayer != null) {
             mMediaPlayer.release();
             mMediaPlayer = null;
         }
         super.onDetachedFromWindow();
       }
    
       /*
        * TextureView.SurfaceTextureListener
        */
        @Override
       public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
         Surface surface = new Surface(surfaceTexture);
         try {
             mMediaPlayer = new MediaPlayer();
             mMediaPlayer.setOnCompletionListener(mCompletionListener);
             mMediaPlayer.setOnBufferingUpdateListener(this);
             mMediaPlayer.setOnErrorListener(this);
             mMediaPlayer.setLooping(isLooping);
             mMediaPlayer.setDataSource(getContext(), mSource);
             mMediaPlayer.setSurface(surface);
             mMediaPlayer.prepare();
             mMediaPlayer.start();
         } catch (IllegalArgumentException e) {
             e.printStackTrace();
         } catch (SecurityException e) {
             e.printStackTrace();
         } catch (IllegalStateException e) {
             e.printStackTrace();
             mMediaPlayer.reset();
         } catch (IOException e) {
             e.printStackTrace();
         }
       }
    
       @Override
       public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {}
    
      @Override
      public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
         surface.release();
         return true;
      }
    
      @Override
      public void onSurfaceTextureUpdated(SurfaceTexture surface) {}
    }
    

提交回复
热议问题