- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
问这个问题是因为我搜索了几个小时后没有找到解决方案/建议。所有回答的解决方案都带有 Fragment。我在寻找 ViewPagerAdapter 和 FrameLayout。
我的 ViewPagerAdapter xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/promotion_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/some_image"
android:layout_width="match_parent"
android:layout_height="@dimen/view_pager_height"
android:scaleType="fitXY" />
<FrameLayout
android:id="@+id/youtube_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
//Some other view items
</RelativeLayout>
我的 ViewPagerAdapter Java 代码:
public class ArticleViewPagerAdapter extends PagerAdapter {
public String TAG = ArticleViewPagerAdapter.class.getSimpleName();
private ArrayList<Article> mArticleList = new ArrayList<>();
private Activity mContext;
private LayoutInflater mLayoutInflater;
private FragmentManager mFragmentManger;
private YouTubePlayerListener mYouTubePlayerListener;
public ArticleViewPagerAdapter(Activity context, ArrayList<Article> articleList, FragmentManager fragmentManager, YouTubePlayerListener youTubePlayerListener) {
this.mContext = context;
this.mArticleList = articleList;
this.mFragmentManger = fragmentManager;
this.mYouTubePlayerListener = youTubePlayerListener;
mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return mArticleList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == (object);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View itemView = mLayoutInflater.inflate(R.layout.activity_news, container,
false);
itemView.setTag(position);
updateView(itemView, position);
((ViewPager) container).addView(itemView);
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
private void updateView(View itemView, int position) {
final int index = position;
final View finalView = itemView;
//Initializing the view items
final ImageView mNewsImage = itemView.findViewById(R.id.some_image);
final FrameLayout mYoutubeFragment = itemView.findViewById(R.id.youtube_fragment);
//Let's Test using this
final YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();
ResArticle articleResponse = response.body(); //Got response from API
if (articleResponse != null && articleResponse.getData() != null) {
final Article article = articleResponse.getData();
final String pageUrl = SHARE_BASE_URL + article.getArticleId();
if (article != null) {
if (article.getArticleType()==Constants.ARTICLE_TYPE_NEWS) {
//Basically setting visibility But you can ignore this part
mNewsImage.setVisibility(View.VISIBLE);
mYoutubeFragment.setVisibility(View.GONE);
}
if(article.getArticleType()==Constants.ARTICLE_TYPE_VIDEO) {
Log.d(TAG,"Article Type is Video");
mYoutubeFragment.setVisibility(View.VISIBLE);
mNewsImage.setVisibility(View.GONE);
youTubePlayerFragment.initialize(mContext.getString(R.string.web_client_id), new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) {
youTubePlayer.setShowFullscreenButton(false);
youTubePlayer.cueVideo("video_id");
if (mYouTubePlayerListener!=null)
mYouTubePlayerListener.setYouTubePlayer(youTubePlayer);
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
Log.e(TAG, "Youtube Video initialization failed");
}
});
FragmentTransaction transaction = mFragmentManger.beginTransaction();
transaction.replace(R.id.youtube_fragment, youTubePlayerFragment).commit();
}
}
} else {
Toast.makeText(mContext, mContext.getString(R.string.article_info_not_found), Toast.LENGTH_SHORT).show();
Log.e(TAG, "Article info not found");
}
}
}
}
我是从 Activity 而非 YouTubeBaseActivity
调用适配器。
问题:YouTube 视频播放因播放器顶部未经授权的覆盖而停止。 YouTubePlayerView 不包含在其祖先 android.widget.FrameLayout 中。祖先边缘与 YouTubePlayerView 边缘之间的距离为:left: 0, top: 0, right: 0, bottom: 0(这些都应该是正数)。
为什么我会收到错误消息?当我使用 ViewPager 加载多个 YouTube 播放器时。正如我们所知,viewpager 加载下一个、上一个和当前项目。因此,当前的 YouTube 视频会被初始化,下一个视频也会被初始化。但是由于当前的 YouTubePlayer 覆盖了下一个(预加载)。
请帮忙。或者我应该使用任何库来加载 YouTube 视频。
最佳答案
通过移除布局中 YouTubePlayerView 中的填充来解决此问题。所以你的布局看起来像这样:
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/video_player"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000" />
为什么在适配器中使用 instantiateItem
而不是 getItem
?
关于android - ViewPagerAdapter : YouTube video playback stopped due to unauthorized overlay on top of player,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49383873/
我有一个带有用于覆盖的 css 类的面板,其中包含一个不应该透明的 div
我已经尝试了 2 天不让 openldap 的 memberof overlay 工作并给出一些实际结果。我的数据库配置: database bdb suffix "dc=exampl
我想使用 jquery ui 弹出一个模式对话框,其中覆盖层是全黑的。我知道我可以在主题中设置它,但我不希望所有对话框都有黑色覆盖。只是其中之一。 有没有办法在每个对话框的基础上配置对话框的背景(覆盖
我是新来的,所以如果我问错了问题或忘记了什么,我先道歉。我尝试了其他问题/答案中的内容,但无法解决我的问题。 我在 div1 上有一个简单的叠加 div2。 div1 里面有一个 svg。 svg 向
我正在使用 npm overlay-navbar 模块创建一个 overlay-navbar https://www.npmjs.com/package/overlay-navbar但是我收到一个错误
我只想为我在 nix 的叠加层中定义的构建应用配置点。 也就是我要设置 permittedInsecurePackages = [ "webkitgtk-2.4.11" ]; 在叠加层中。我
我需要有关如何正确使用 Google Maps API v3 自定义叠加层的 onRemove() 方法的帮助。我在 Google map 上有一个标记,单击该标记时,将显示一个 d3 圆环图,该图将
首先这是我正在使用和尝试做的事情: 此效果的最小设置:flowplayer.org/tools/demos/overlay/index.html 然后是 Apple Leopard 预览效果:flow
我的问题真的很简单...... 想象一张代表您家周围的街道和建筑物的背景图片,请注意这是专门制作的图片。此图像( View )是可缩放的,到目前为止一切都很好。类似于 map ,但使用图像代替。 现在
我正在使用花式框在行内 div 中打开各种编辑功能。我使用ajax获取div内容,将其移动到div中,然后在Fancybox中打开div。大多数情况下效果很好。一些编辑 block 中包含 ckedi
在应用程序中扩展 OSMdroid Overlay 类时 import org.osmdroid.views.overlay.Overlay; ... public class MapOverlayA
我的应用程序有问题,其中包括 osmdroid。每次我尝试在我的设备上运行该应用程序并触摸 map 时,该应用程序都会崩溃,并且出现此错误: 2018-10-02 14:11:45.191 1
我如何在UWP应用程序中实现这样的功能?使用案例:静态图像包含蓝点(覆盖),使用户有机会在蓝点上单击/悬停以了解更多信息。当用户悬停/单击蓝点时,会弹出一个文本来描述图像中的内容。。1)如何在静态图像
仅适用于 iOS:当您将叠加层添加到 Web HTML 用户界面时,您无法通过设置 overflow: hidden on the body 或 html 来阻止底层页面滚动到叠加层之外。这在桌面和
我是 HTML/CSS 新手。我创建了这个侧边栏,当单击时,它会从左侧滑动,滑动时会显示不透明背景。不幸的是,图像显示在不透明覆盖层的顶部,我找不到让它停止在不透明覆盖层上如此明亮地显示的问题。我正在
是否可以创建一个窗口作为另一个窗口的叠加层,例如,您可以在窗口的标题栏或状态栏中显示一个图标? 为了这个问题的目的假设: 该窗口是一个外部窗口(不属于我的应用程序) 叠加层为 16x16 像素并具有透
在 bokeh Holoviews 画廊中,有一个名为“Scatter economic”的示例。 http://holoviews.org/gallery/demos/bokeh/scatter_e
制作 gwt 覆盖类型的深拷贝的最佳方法是什么? 我正在寻找一个函数或库来检查 GWT 覆盖并克隆它。它必须能够克隆包含的数组或对象。 谢谢 最佳答案 我会考虑两种方式。大多数时候覆盖对象与 JSON
最近,我尝试创建一个 Ionic 侧边菜单。我想让侧面菜单覆盖联系人。 但是,我不想推送内容。 --> fu
我正在尝试在另一个正在运行的应用程序上方创建一个覆盖窗口。 让我们说火狐。我通过使用实现 创建窗口 win = XCreateWindow( display, *firefoxwindow,
我是一名优秀的程序员,十分优秀!