我用过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 的页面的上一页。
我尝试了所有解决方案,例如
- 删除填充和边距
- 将背景设置为黑色
- 设置重叠为 View.GONE的所有视图的可见性
如果我不使用 DepthPageTransformer,一切正常。
编辑
我们知道,Viewpager 默认的 OFFSCREEN_PAGES=1。所以下一页和上一页将在缓存中。考虑一下,如果播放器视图位于第 5 页,如果我移至第 7 页并移回第 5 页,则视频正在播放。它清楚地表明"previous page of video page overlays"
. 有什么方法可以刷新此页面或从 OFFSCREEN_PAGES LIST 中删除上一页。
谁能帮我?