Android 如何避免MediaPlayer';什么是黑屏?

Android 如何避免MediaPlayer';什么是黑屏?,android,media-player,Android,Media Player,因此,在我的应用程序中,MediaPlayer基于SurfaceView,扩展如下: public class VideoView extends SurfaceView {} 现在,它在内部使用MediaPlayer,我想实现的是使屏幕的起始颜色为白色而不是黑色。VideoView单独放置在白色背景布局中。它是白色的,但当它开始播放视频时,VideoView会变黑一秒钟。视频本身有白色背景,并且它的第一帧不是黑色的,所以我假设它是关于MediaPlayer的。当它开始播放时,默认情况下屏幕

因此,在我的应用程序中,MediaPlayer基于SurfaceView,扩展如下:

public class VideoView extends SurfaceView  {}
现在,它在内部使用MediaPlayer,我想实现的是使屏幕的起始颜色为白色而不是黑色。VideoView单独放置在白色背景布局中。它是白色的,但当它开始播放视频时,VideoView会变黑一秒钟。视频本身有白色背景,并且它的第一帧不是黑色的,所以我假设它是关于MediaPlayer的。当它开始播放时,默认情况下屏幕变黑。我猜我可以使用这样的转换:

TransitionDrawable transition = new TransitionDrawable(new Drawable[]{new ColorDrawable(Color.WHITE), new ColorDrawable(Color.TRANSPARENT)});

if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
    this.setBackgroundDrawable(transition);
else
    this.setBackground(transition);

transition.setCrossFadeEnabled(true);
transition.startTransition(1000);
TransitionDrawable transition=new TransitionDrawable(new Drawable[]{new ColorDrawable(Color.WHITE),new ColorDrawable(Color.TRANSPARENT)});
if(Build.VERSION.SDK\u INT
然而,这并没有多大帮助。那么,有没有办法实现我的目标呢?

忘了提到它的本地视频文件(来自SD卡)正在播放。所以黑屏不是关于建立一个长的HTTP会话或其他与流相关的事情。通过
prepareAsync()进行准备

所以我终于找到了一个糟糕的解决方案。哦,总比什么都没有好:

private TransitionDrawable transition;
private Animation videoViewFadeInAnimation;
@SuppressWarnings("deprecation")
public void start() {

    if (videoViewFadeInAnimation == null){
        videoViewFadeInAnimation = new AlphaAnimation(0, 1);
        videoViewFadeInAnimation.setDuration(600);
        videoViewFadeInAnimation.setFillAfter(true);
        videoViewFadeInAnimation.setAnimationListener(new AnimationListener() {
            @Override
            public void onAnimationStart(Animation arg0) {}
            @Override
            public void onAnimationRepeat(Animation arg0) {}

            @Override
            public void onAnimationEnd(Animation arg0) {
                if (DeviceInfo.hasAPI11())
                    setAlpha(1);
            }
        });

    }

    if (transition == null){
        transition = new TransitionDrawable(new Drawable[]{new ColorDrawable(Color.WHITE), new ColorDrawable(Color.TRANSPARENT)});
        transition.setCrossFadeEnabled(true);

        if(DeviceInfo.hasAPI16())
            this.setBackground(transition);
        else
            this.setBackgroundDrawable(transition);
    }

    if (isInPlaybackState()) {
        if (mCurrentState!=STATE_PAUSED){
            startAnimation(videoViewFadeInAnimation);
            transition.startTransition(1);
        }
        hideVideoControls();
        mMediaPlayer.start();
        mCurrentState = STATE_PLAYING;
    }
    mTargetState = STATE_PLAYING;
}
这是我的VideoView开始播放视频的一种方法。基本上,它为VideoView制作0 alpha,为1毫秒制作一个白色背景(如果没有背景转换,则无法工作),然后将alpha从0动画到1动画600毫秒。如果使用lt 600值,则恼人的黑屏变得明显。然而600毫秒的无视频也不是最好的事情,因为视频音频开始得更早。这种解决方案并不总是有效,也不知道为什么