在ListView中播放YouTube视频列表

编程入门 行业动态 更新时间:2024-10-22 21:21:16
本文介绍了在ListView中播放YouTube视频列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我在youtube视频的播放列表中遇到问题.让我解释一下,我有一个片段,放在listview上.在该列表中,每个项目都有单独的子视图.我被放置在< com.google.android.youtube.player.YouTubeThumbnailView> 标记中,并且还尝试放置Fragment.在这两种情况下,我都会遇到二进制膨胀"异常.请告诉我任何解决我问题的方法.

I am facing problem with show and play list of youtube videos. Let me explain, I have a fragment and placed on listview. In that list have separate child view for each item. I was placed <com.google.android.youtube.player.YouTubeThumbnailView> tag and also try to place Fragment. In both cases I am getting Binary Inflated exception. Please tell me any solution for my problem.

Process: com.example.sampleexamplefor_recyclerview, PID: 6510 android.view.InflateException: Binary XML file line #28: Error inflating class com.google.android.youtube.player.YouTubePlayerView at android.view.LayoutInflater.createView(LayoutInflater.java:633) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at com.example.sampleexamplefor_recyclerview.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:40) at com.example.sampleexamplefor_recyclerview.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:24) at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5288) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4551) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1962) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1371) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145) at android.view.View.layout(View.java:15684) at android.view.ViewGroup.layout(ViewGroup.java:4981) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) at android.view.View.layout(View.java:15684) at android.view.ViewGroup.layout(ViewGroup.java:4981) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) at android.widget.FrameLayout.onLayout(FrameLayout.java:508) at android.view.View.layout(View.java:15684) at android.view.ViewGroup.layout(ViewGroup.java:4981) at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494) at android.view.View.layout(View.java:15684) at android.view.ViewGroup.layout(ViewGroup.java:4981) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) at android.widget.FrameLayout.onLayout(FrameLayout.java:508) at android.view.View.layout(View.java:15684) at android.view.ViewGroup.layout(ViewGroup.java:4981) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2186) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1920) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1106) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6018) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:792) at android.view.Choreographer.doCallbacks(Choreographer.java:596) at android.view.Choreographer.doFrame(Choreographer.java:557) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:778) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:155) at android.app.ActivityThread.main(ActivityThread.java:5696) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:607)             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)             at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)             at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)             at android.view.LayoutInflater.inflate(LayoutInflater.java:504)             at android.view.LayoutInflater.inflate(LayoutInflater.java:414)             at com.example.sampleexamplefor_recyclerview.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:40)             at com.example.sampleexamplefor_recyclerview.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:24)             at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5288)             at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4551)             at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461)             at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1962)             at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1371)             at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334)             at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)             at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)             at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)             at android.view.View.layout(View.java:15684)             at android.view.ViewGroup.layout(ViewGroup.java:4981)             at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)             at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)             at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)             at android.view.View.layout(View.java:15684)             at android.view.ViewGroup.layout(ViewGroup.java:4981)             at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)             at android.widget.FrameLayout.onLayout(FrameLayout.java:508)             at android.view.View.layout(View.java:15684)             at android.view.ViewGroup.layout(ViewGroup.java:4981)             at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494)             at android.view.View.layout(View.java:15684)             at android.view.ViewGroup.layout(ViewGroup.java:4981)             at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)             at android.widget.FrameLayout.onLayout(FrameLayout.java:508)             at android.view.View.layout(View.java:15684)             at android.view.ViewGroup.layout(ViewGroup.java:4981)             at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2186)             at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1920)             at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1106)             at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6018)             at android.view.Choreographer$CallbackRecord.run(Choreographer.java:792)             at android.view.Choreographer.doCallbacks(Choreographer.java:596)             at android.view.Choreographer.doFrame(Choreographer.java:557)             at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:778)             at android.os.Handler.handleCallback(Handler.java:739)             at android.os.Handler.dispatchMessage(Handler.java:95)             at android.os.Looper.loop(Looper.java:155)             at android.app.ActivityThread.main(ActivityThread.java:5696)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) Caused by:

适配器:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.VideoInfoHolder> implements YouTubePlayer.OnInitializedListener{ //these ids are the unique id for each video String[] VideoID = {"P3mAtvs5Elc", "nCgQDjiotG0", "P3mAtvs5Elc"}; Context ctx; YouTubeThumbnailLoader youTubeThumbnailLoader; private MyPlayerStateChangeListener playerStateChangeListener; private MyPlaybackEventListener playbackEventListener; private YouTubePlayer player; public RecyclerAdapter(Context context) { this.ctx = context; } @Override public VideoInfoHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false); return new VideoInfoHolder(itemView); } @Override public void onBindViewHolder(final VideoInfoHolder holder, final int position) { holder. youTubeView.initialize("AIzaSyCS8nKb2V9RROPP3ehy4mhQbwhVdfe7V8o", this); playerStateChangeListener = new MyPlayerStateChangeListener(); playbackEventListener = new MyPlaybackEventListener(); holder.relativeLayoutOverYouTubeThumbnailView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.GONE); player.play(); } }); final YouTubeThumbnailLoader.OnThumbnailLoadedListener onThumbnailLoadedListener = new YouTubeThumbnailLoader.OnThumbnailLoadedListener(){ @Override public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader.ErrorReason errorReason) { } @Override public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) { youTubeThumbnailView.setVisibility(View.VISIBLE); holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.VISIBLE); } }; holder.relativeLayoutOverYouTubeThumbnailView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.GONE); } }); /*holder.youTubeThumbnailView.initialize("AIzaSyCS8nKb2V9RROPP3ehy4mhQbwhVdfe7V8o", new YouTubeThumbnailView.OnInitializedListener() { @Override public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader youTubeThumbnailLoader) { youTubeThumbnailLoader = youTubeThumbnailLoader; youTubeThumbnailLoader.setVideo(VideoID[position]); youTubeThumbnailLoader.setOnThumbnailLoadedListener(onThumbnailLoadedListener); } @Override public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) { //write something for failure } });*/ } @Override public int getItemCount() { return VideoID.length; } @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) { this.player = player; player.setPlayerStateChangeListener(playerStateChangeListener); player.setPlaybackEventListener(playbackEventListener); if (!b) { player.cueVideo("fhWaJi1Hsfo"); // Plays www.youtube/watch?v=fhWaJi1Hsfo } } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { } public class VideoInfoHolder extends RecyclerView.ViewHolder implements View.OnClickListener { protected RelativeLayout relativeLayoutOverYouTubeThumbnailView; YouTubeThumbnailView youTubeThumbnailView; protected ImageView playButton; private YouTubePlayerView youTubeView; public VideoInfoHolder(View itemView) { super(itemView); playButton=(ImageView)itemView.findViewById(R.id.btnYoutube_player); playButton.setOnClickListener(this); relativeLayoutOverYouTubeThumbnailView = (RelativeLayout) itemView.findViewById(R.id.relativeLayout_over_youtube_thumbnail); youTubeThumbnailView = (YouTubeThumbnailView) itemView.findViewById(R.id.youtube_thumbnail); // youTubeView = (YouTubePlayerView)itemView. findViewById(R.id.youtube_view); } @Override public void onClick(View v) { Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity) ctx, "AIzaSyCS8nKb2V9RROPP3ehy4mhQbwhVdfe7V8o", VideoID[getLayoutPosition()]); ctx.startActivity(intent); } } private final class MyPlaybackEventListener implements YouTubePlayer.PlaybackEventListener { @Override public void onPlaying() { // Called when playback starts, either due to user action or call to play(). } @Override public void onPaused() { // Called when playback is paused, either due to user action or call to pause(). } @Override public void onStopped() { // Called when playback stops for a reason other than being paused. } @Override public void onBuffering(boolean b) { // Called when buffering starts or ends. } @Override public void onSeekTo(int i) { // Called when a jump in playback position occurs, either // due to user scrubbing or call to seekRelativeMillis() or seekToMillis() } } private final class MyPlayerStateChangeListener implements YouTubePlayer.PlayerStateChangeListener { @Override public void onLoading() { // Called when the player is loading a video // At this point, it's not ready to accept commands affecting playback such as play() or pause() } @Override public void onLoaded(String s) { // Called when a video is done loading. // Playback methods such as play(), pause() or seekToMillis(int) may be called after this callback. } @Override public void onAdStarted() { // Called when playback of an advertisement starts. } @Override public void onVideoStarted() { // Called when playback of the video starts. } @Override public void onVideoEnded() { // Called when the video reaches its end. } @Override public void onError(YouTubePlayer.ErrorReason errorReason) { // Called when an error occurs. } } }

XML:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="schemas.android/apk/res/android" android:id="@+id/parent_relativeLayout" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v7.widget.CardView xmlns:android="schemas.android/apk/res/android" xmlns:card_view="schemas.android/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" card_view:cardCornerRadius="5dp" card_view:cardElevation="0dp" android:layout_marginTop="10dp" card_view:cardBackgroundColor="@android:color/black" card_view:cardPreventCornerOverlap="false" card_view:cardUseCompatPadding="true"> <com.google.android.youtube.player.YouTubeThumbnailView android:id="@+id/youtube_thumbnail" android:layout_width="match_parent" android:layout_height="180dp" android:scaleType="centerCrop" android:visibility="gone"/> <com.google.android.youtube.player.YouTubePlayerView android:id="@+id/youtube_view" android:layout_width="match_parent" android:layout_height="180dp"/> <RelativeLayout android:id="@+id/relativeLayout_over_youtube_thumbnail" android:layout_width="match_parent" android:layout_height="250dp" android:background="#707070" android:visibility="visible"> <ImageView android:id="@+id/btnYoutube_player" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="center" android:src="@mipmap/ic_launcher"/> </RelativeLayout> </android.support.v7.widget.CardView> </RelativeLayout>

推荐答案

/YouTubePlayerFragment#Overview"rel =" nofollow>文档,

of documentation,

请注意,在播放视频时,此视图的最小尺寸为200x110 dp.如果缩小视图,视频将自动停止播放.另外,在播放视频时,不允许将此片段的视图与其他视图重叠.

Note that while videos are playing, this View has a minimum size of 200x110 dp. If you make the view any smaller, videos will automatically stop playing. Also, it is not permitted to overlay this fragment's view with other views while a video is playing.

更多推荐

在ListView中播放YouTube视频列表

本文发布于:2023-11-23 13:57:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1621681.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:列表   视频   ListView   YouTube

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!