所以在我的应用程序中,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);
然而这并没有多大帮助。那么有没有办法实现我的目标?
忘记提及正在播放其本地视频文件(来自SD卡)。因此,黑屏不是关于建立长的HTTP会话或其他与流相关的事情。准备工作通过prepareAsync();
答案 0 :(得分:0)
所以我终于找到了一个讨厌的解决方案。哦,它总比没有好:
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,白色bg为1ms(没有bg过渡时不起作用)然后将alpha从0到1动画为600ms。如果使用值<600,则恼人的黑屏变得明显。然而600毫米没有视频可见也不是最好的东西因为视觉音频开始较早。这个解决方案并不总是有用,也不知道为什么。