滚动时,YouTubePlayerView 出现黑色轮廓

4
这个问题之前已经在这里 被问过了,但是我想提供更多的信息。 当滚动时,YouTubePlayerView 经常会出现黑色轮廓,在暂停并改变旋转后可能会发生这种情况。 当我滚动并且它被覆盖时,似乎就会发生这种情况(为防止控件被隐藏而暂停)。暂停不是问题,因为用户没有观看视频,但是黑屏是问题所在。 此问题出现在运行Android 4.0.3的 Galaxy Tab 2 上,也出现在运行 4.1.2的 Xperia T 上,在运行 4.2.2的 One X 和运行 2.2.2的 Desire 上不会出现该问题。 一些更多的信息: 在向下滚动时,已暂停的视频图像似乎会与 Xperia T 屏幕顶部一起拉伸。当它看起来达到最小尺寸时,黑色区域开始滚动到其他内容上方。 警告文本: 由于未经授权的叠加在播放器上方,YouTube 视频播放停止。YouTubePlayerView未包含在其祖先 android.widget.ScrollView@41290ca0中。祖先的边缘与 YouTubePlayerView 的距离为:左: 20、上: 0、右: 20、下: -11(这些距离应都为正数)。
这是我的代码:
    <TextView
        android:id="@+id/textView"
        android:gravity="center"
        android:textSize="25sp"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="@string/header" />

   <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="0dp" >

        <LinearLayout
            android:gravity="center_horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" > <!-- In a linear layout so it is possible to set it in the middle -->

            <com.google.android.youtube.player.YouTubePlayerView
                 android:id="@+id/youtubeplayer"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:visibility="gone" >
             </com.google.android.youtube.player.YouTubePlayerView>
        </LinearLayout>
   </ScrollView>

我的问题是,有没有办法消除或预防黑色补丁的出现?

目前我有一个大型解决方案,当用户开始滚动时,YouTube播放器将被释放,一张带有播放按钮的图像将取代它,当用户按下按钮时,YouTube播放器将重新初始化并继续播放视频。


也许你可以看一下我在这篇帖子中的回复,或许能帮到你。 - lucasddaniel
谢谢您的时间,我知道不允许在此上放任何视图,但客户需要。然而,我希望YouTube能够在所有平台上正确处理它,而不是给出黑色大纲。 - Roy
1个回答

0
实际上,这个问题有一个解决方法。你需要给你的ScrollView添加一个监听器并捕获Y轴距离。当Y轴距离接近YoutubePlayerView的高度时,你需要暂停视频。
scrollView.getViewTreeObserver()
                .addOnScrollChangedListener(() -> {
                    onScroll(scrollView.getScrollY()); 
                    }
                });


private void onScroll(int position)
    { 
            if (position>300 && position <400)
            {
                canPauseOnScroll=false; 
            } 

            if (canPauseOnScroll)
            {
                canPauseOnScroll=false;
                ytHelper.getPlayer().pause();
            } 
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接