2016-12-04 239 views
0

我正在开发一个应用程序,其中我已经在RecyclerView中显示了YouTube视频缩略图,顶部有播放用户选择的视频的YouTube播放器片段。我成功地这样做了。但问题是我想自动播放用户选择的视频。下面 是我的代码: main_activity.xml:如何通过YouTube播放器自动播放视频

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="2" 
    android:orientation="vertical" 
    tools:context="com.example.pc.fkidshell.Main2Activity"> 
    <fragment 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/VideoFragment" 
     android:name="com.google.android.youtube.player.YouTubePlayerFragment" 
     android:layout_below="@+id/my_thirdtoolbar"/> 

    <android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/VideoList" 
     android:layout_below="@+id/VideoFragment" 
     android:scrollbars="vertical"> 
    </android.support.v7.widget.RecyclerView> 
</RelativeLayout> 

secvideo_row.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/thumbnailView" 
     android:layout_gravity="center_horizontal"/> 

</LinearLayout> 

Main_Activity.java:

public class Main2Activity extends AppCompatActivity implements YouTubeThumbnailView.OnInitializedListener, YouTubeThumbnailLoader.OnThumbnailLoadedListener, YouTubePlayer.OnInitializedListener { 
    YouTubePlayerFragment playerFragment; 
    YouTubePlayer Player; 
    YouTubeThumbnailView thumbnailView; 
    YouTubeThumbnailLoader thumbnailLoader; 
    RecyclerView VideoList; 
    RecyclerView.Adapter adapter; 
    List<Drawable> thumbnailViews; 
    List<String> VideoId; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 
     thumbnailViews = new ArrayList<>(); 
     VideoList = (RecyclerView) findViewById(R.id.VideoList); 
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); 
     VideoList.setLayoutManager(layoutManager); 
     adapter = new Main2Activity.VideoListAdapter(); 
     VideoList.setAdapter(adapter); 
     VideoId = new ArrayList<>(); 
     thumbnailView = new YouTubeThumbnailView(this); 
     thumbnailView.initialize("AIzaSyAXlMCst9tNrTGz4xAZ0mY6mJlkNU-3DAs", this); 
     playerFragment = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.VideoFragment); 
     playerFragment.initialize("AIzaSyAXlMCst9tNrTGz4xAZ0mY6mJlkNU-3DAs", this); 
    } 

    @Override 
    public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader youTubeThumbnailLoader) { 
     thumbnailLoader = youTubeThumbnailLoader; 
     youTubeThumbnailLoader.setOnThumbnailLoadedListener(Main2Activity.this); 
     thumbnailLoader.setPlaylist("PLXRActLQ03oY_6AQb-5EMuKFYQA_fDE40"); 
    } 

    @Override 
    public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) { 
    } 

    public void add() { 
     adapter.notifyDataSetChanged(); 
     if (thumbnailLoader.hasNext()) 
      thumbnailLoader.next(); 
    } 

    @Override 
    public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) { 
     thumbnailViews.add(youTubeThumbnailView.getDrawable()); 
     VideoId.add(s); 
     add(); 
    } 

    @Override 
    public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader.ErrorReason errorReason) { 

    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) { 
     Player = youTubePlayer; 
     Player.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() { 
      @Override 
      public void onFullscreen(boolean b) { 
       VideoList.setVisibility(b ? View.GONE : View.VISIBLE); 
      } 
     }); 
    } 

    @Override 
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { 
    } 

    public class VideoListAdapter extends RecyclerView.Adapter<VideoListAdapter.MyView> { 

     public class MyView extends RecyclerView.ViewHolder { 
      ImageView imageView; 
      public MyView(View itemView) { 
       super(itemView); 
       imageView = (ImageView) itemView.findViewById(R.id.thumbnailView); 
      } 
     } 

     @Override 
     public VideoListAdapter.MyView onCreateViewHolder(ViewGroup parent, int viewType) { 
      View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.secvideo_row, parent, false); 
      return new MyView(itemView); 
     } 

     @Override 
     public void onBindViewHolder(VideoListAdapter.MyView holder, final int position) { 
      holder.imageView.setImageDrawable(thumbnailViews.get(position)); 
      holder.imageView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Player.loadVideo(VideoId.get(position)); 
        //Player.loadVideo(VideoId.get(position)); 
       } 
      }); 
     } 

     @Override 
     public int getItemCount() { 
      return thumbnailViews.size(); 
     } 
    } 
} 

回答

1

当YouTube播放器初始化,设置播放器状态更改侦听器,以便您可以在视频加载时播放视频,并确保您的活动实现播放器状态回调。 详细代码:

@Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) { 
     Player = youTubePlayer; 
     Player.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() { 
      @Override 
      public void onFullscreen(boolean b) { 
       VideoList.setVisibility(b ? View.GONE : View.VISIBLE); 
      } 
     }); 
     Player.setPlayerStateChangeListener(this); //set player state change listener 
    } 

    @Override 
    public void onAdStarted() { 
    } 

    @Override 
    public void onLoaded(String videoId) { 
     if(!TextUtils.isEmpty(videoId) && Player != null) 
      Player.play(); //auto play 
    } 

    @Override 
    public void onLoading() { 
    } 

    @Override 
    public void onVideoEnded() { 
    } 

    @Override 
    public void onVideoStarted() { 

    } 

    @Override 
    public void onError(ErrorReason reason) { 
     Log.e("onError", "onError : " + reason.name()); 
    } 
+0

隐藏()在onVideoStarted方法显示我错误声明方法虽然我有YouTubePlayer.PlayerStateChangeListener – Iqra

+0

器具活动除去兽皮()方法。我用它来达到某种目的。 – abhishesh

+0

所选视频不会让用户触摸视频播放器上的播放图标。我想再次播放相同的视频。 – Iqra