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 边缘之间的距离为:left:20,top:0,right:20,bottom:-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>

所以我的问题是,有没有办法摆脱或防止黑斑出现?

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

4

1 回答 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();
            } 
    }
于 2020-01-12T04:47:31.613 回答