Android 如何避免MediaPlayer';什么是黑屏?
因此,在我的应用程序中,MediaPlayer基于SurfaceView,扩展如下:Android 如何避免MediaPlayer';什么是黑屏?,android,media-player,Android,Media Player,因此,在我的应用程序中,MediaPlayer基于SurfaceView,扩展如下: public class VideoView extends SurfaceView {} 现在,它在内部使用MediaPlayer,我想实现的是使屏幕的起始颜色为白色而不是黑色。VideoView单独放置在白色背景布局中。它是白色的,但当它开始播放视频时,VideoView会变黑一秒钟。视频本身有白色背景,并且它的第一帧不是黑色的,所以我假设它是关于MediaPlayer的。当它开始播放时,默认情况下屏幕
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毫秒的无视频也不是最好的事情,因为视频音频开始得更早。这种解决方案并不总是有效,也不知道为什么