Android 视频视图闪烁问题

Android 视频视图闪烁问题,android,android-videoview,Android,Android Videoview,我正面临使用VideoView时闪烁的奇怪问题。当活动开始时,它会导致分数的轻微闪烁一秒钟。然后,视频开始。它在视频的顶部和底部显示了两条黑线。请参见下面的快照 我已经在2台设备上测试了我的应用程序 1) 三星n-8000(平板电脑) 2) 联想a-800 video.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re

我正面临使用
VideoView
时闪烁的奇怪问题。当活动开始时,它会导致分数的轻微闪烁一秒钟。然后,视频开始。它在视频的顶部和底部显示了两条黑线。请参见下面的快照

我已经在2台设备上测试了我的应用程序

1) 三星n-8000(平板电脑)

2) 联想a-800

video.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:background="#ffffff"
 android:gravity="center">

 <VideoView 
    android:id="@+id/vvSplash"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="#00ffffff">
</VideoView>

</LinearLayout>

任何帮助都将不胜感激。多谢各位

我也面临同样的问题,但通过将videoview的布局参数从wrap content更改为匹配父级,我解决了这个问题。还需要从XML中删除视频视图的背景属性。我希望它对您有用

只需从xml中删除以下行即可

android:background="#00ffffff"

它将帮助你:)

听起来很可笑,但答案如下:

我重复这个解决方案,感谢那些发现的人:

<SurfaceView
    android:layout_width="0px"
    android:layout_height="0px"
    android:visibility="gone" />


将曲面视图添加到活动的根视图,而不是直接父视图,这一点非常重要。否则它将无法工作。

对于未来的人来说:这个丑陋的错误似乎已经在棉花糖中解决了。在我的工作中,我们正在使用Xamarin进行开发(因此,基本上,所有视图都是以编程方式添加的)。我们有很多测试设备,我主要使用的是一个棉花糖设备,所以在构建我正在工作的页面时,我从来没有注意到这种黑色闪烁。最后用棒棒糖装置测试后,我注意到了这种闪烁


不幸的是,我没有解决办法。我们需要我们的应用程序尽可能跨平台,因此不鼓励使用布局xml。

对于仍然面临问题且不知道如何使用上述答案的任何人。 它只需复制此代码并将其粘贴到主活动布局中,您正在主(第一)布局下使用的
videoview


就我而言

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/Mainframlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/facebookbgcolor" >
<SurfaceView
    android:layout_width="0px"
    android:layout_height="0px"
    android:visibility="gone" />
.....rest of the layout

……布局的其余部分

将基于xml的解决方案从调整为使用Java代码。在展开布局之前,将其放在片段的onCreateView()中:

// Add a SurfaceView to prevent flickering when the video is loaded later.
SurfaceView surfaceView = new SurfaceView(getActivity());
surfaceView.setVisibility(View.GONE);
container.addView(surfaceView, new ViewGroup.LayoutParams(0, 0));

它做同样的事情,并且可以在您不能或不想更改XML时使用。

如果您的问题是
VideoView
在按下后退按钮时闪烁,只需在
onBackPressed()中将您的
VideoView
可见性设置为
不可见
消失
调用超级实现之前的活动方法

如果用户也可以通过“向上”按钮离开,则拦截
android.R.home
选项项以隐藏
视频视图

以下是Kotlin的一个例子:

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
    android.R.id.home -> super.onOptionsItemSelected(item).also {
        video_view.visibility = GONE // Hide videoView before leaving to avoid flickering
    }
    R.id.action_share -> consume { shareVideo() } // Your regular menu options
    else -> super.onOptionsItemSelected(item)
}

override fun onBackPressed() {
    video_view.visibility = GONE // Hide videoView before leaving to avoid flickering
    super.onBackPressed()
}

@Piotr Chojnacki谢谢你编辑的问题:)我也面临着和你一样的问题。你是如何解决这个问题的?我已经测试了你所说的,但没有效果。无论如何,谢谢你,还有我的+1。我正在播放一个视频,完成后我在视频上放了一个缩略图,但我得到了这些黑色闪烁,当视频开始和结束时,在阅读本文后,我试图将视频背景设置为缩略图,噗,没有更多问题。谢谢,+1。可以用Java代码代替。请参阅我的答案。这并不能解决Android 5.1上的问题。对于Xamarin解决方案:
// Add a SurfaceView to prevent flickering when the video is loaded later.
SurfaceView surfaceView = new SurfaceView(getActivity());
surfaceView.setVisibility(View.GONE);
container.addView(surfaceView, new ViewGroup.LayoutParams(0, 0));
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
    android.R.id.home -> super.onOptionsItemSelected(item).also {
        video_view.visibility = GONE // Hide videoView before leaving to avoid flickering
    }
    R.id.action_share -> consume { shareVideo() } // Your regular menu options
    else -> super.onOptionsItemSelected(item)
}

override fun onBackPressed() {
    video_view.visibility = GONE // Hide videoView before leaving to avoid flickering
    super.onBackPressed()
}