0

我用过ViewPager。在某些项目中,我使用过Youtube Player Fragment.

我使用了这个 Android 开发页面中的 PageTransformers

public class DepthPageTransformer implements ViewPager.PageTransformer {
    private static final float MIN_SCALE = 0.75f;

    public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();

        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.setAlpha(0);

        } else if (position <= 0) { // [-1,0]
            // Use the default slide transition when moving to the left page
            view.setAlpha(1);
            view.setTranslationX(0);
            view.setScaleX(1);
            view.setScaleY(1);

        } else if (position <= 1) { // (0,1]
            // Fade the page out.
            view.setAlpha(1 - position);

            // Counteract the default slide transition
            view.setTranslationX(pageWidth * -position);

            // Scale the page down (between MIN_SCALE and 1)
            float scaleFactor = MIN_SCALE
                    + (1 - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);

        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0);
        }
    }
}

问题是,

如果我用过DepthPageTranformer

当我移动到那个页面(有 youtube 片段)时,我收到警告

W/YouTubeAndroidPlayerAPI:由于播放器顶部未经授权的覆盖,YouTube 视频播放停止。YouTubePlayerView 被 android.widget.RelativeLayout{28896be5 VE.... ........ 39420,0-39960,850} 遮挡。YouTubePlayerView 被完全覆盖,遮挡视图的每个边缘与 YouTubePlayerView 之间的距离(以 px 为单位)为:左:0,上:0,右:0,下:510..

但如果我不使用任何转换器或使用 ZoomPageTransformer,它就可以工作。

我使用自定义 ViewPager 调试了代码以检查哪个视图是

android.widget.RelativeLayout{28896be5 V.E..... ........ 39420,0-39960,850}

它是具有 Youtube Player Fragment 的页面的上一页。

我尝试了所有解决方案,例如

  1. 删除填充和边距
  2. 背景设置为黑色
  3. 设置重叠为 View.GONE的所有视图的可见性

如果我不使用 DepthPageTransformer,一切正常。

编辑

我们知道,Viewpager 默认的 OFFSCREEN_PAGES=1。所以下一页和上一页将在缓存中。考虑一下,如果播放器视图位于第 5 页,如果我移至第 7 页并移回第 5 页,则视频正在播放。它清楚地表明"previous page of video page overlays". 有什么方法可以刷新此页面或从 OFFSCREEN_PAGES LIST 中删除上一页。

谁能帮我?

4

1 回答 1

0

只需实现这个接口YouTubePlayer.OnFullscreenListener Activity 或 Fragment。它覆盖了下面的方法,

override fun onFullscreen(isFullScreen: Boolean) {
    if (isFullScreen)
        window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
    else
        window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}

为什么会这样?

使用YouTubePlayerFragmentYouTubePlayerView播放 youtube 视频时,我们需要隐藏状态栏,因为不会在YouTubePlayerFragmentYouTubePlayerView上方添加更多视图。

我也遇到了这个问题并找到了解决方案。

试试这个。

于 2018-05-24T12:58:17.407 回答