Android: 添加按钮到 YouTubePlayerView

Android: Add button to YouTubePlayerView

我想在 YouTubePlayerView but don't know the best way to go about doing so. I would like the button only to be present when the user clicks on the screen to bring up the youtube controls (play/pause, timeline, share, etc.) that fades away after a few seconds just as the controls fade. I've looked into ViewGroupOverlay but not sure if this is the best way to do so and I'm not sure how to only have the button added to the overlay when the controls are available. It feels like I have to override one of the YouTubePlayer or YouTubePlayerView 函数中添加一个按钮以了解控件何时可见,但我只是在这里做一个假设。我对 android 比较陌生,而且我已经有一段时间没有在 Java 中做过任何重要的事情了。如果其他人不知道确切的答案,这里的任何方向都会很棒。在发布这篇文章之前,我已经环顾了大约 2 个小时 :)

package com.example.something.exampletube;

import android.os.Bundle;
import android.view.ViewGroupOverlay;
import android.widget.Toast;

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;

/**
 * Created by Nicholas Dwyer on 4/17/2015.
 * This class is used to play youtube videos
 */
public class PlayerActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
YouTubePlayerView playerView;
ViewGroupOverlay groupOverlay;


@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);

    setContentView(R.layout.activity_player);

    playerView = (YouTubePlayerView) findViewById(R.id.player_view);
    playerView.initialize(YoutubeConnector.KEY, this);
    groupOverlay = playerView.getOverlay();
}

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean restored) {
    if(!restored) {
        youTubePlayer.cueVideo(getIntent().getStringExtra("VIDEO_ID"));
    }
}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
    String errorMessage = "There was an error initializing the YouTubePlayer" + youTubeInitializationResult.toString();
    Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
    //Toast.makeText(this,getString(R.string.failed), Toast.LENGTH_LONG).show();
}

}

无法按照 Google 的指定在播放器上方添加按钮:

https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubePlayerView

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 the view with other views while a video is playing.

另见此处Is it possible to overlay some views on YouTube Android Player?

如果任何视图仅部分重叠(或 YouTubeVideoView 仅部分滚动到可见屏幕之外),视频将在大约一秒后停止。 Google 据称这样做是为了防止滥用视频在 YouTube 之外投放广告。

备选方案:使用 WebView 并将其嵌入。

另一个不错的选择是使用 Exoplayer,用视图覆盖您的视频。它不是 android sdk 的一部分,但它被 google 推荐并包含在 android 开发人员文档中:

http://google.github.io/ExoPlayer/ https://developer.android.com/guide/topics/media/exoplayer.html

Exoplayer 允许您流式传输任何类型的视频,而不仅仅是 Youtube 视频。

还值得一提的是,在 Youtube 应用程序中使用了 Exoplayer。

您可以将按钮添加到播放器内部,而不是将按钮添加为播放器上方的层:

  Button b = new Button(this);
  b.setBackgroundResource(R.drawable.close);
  ((ViewGroup)((ViewGroup) youTubePlayerView.getChildAt(0)).getChildAt(0)).addView(b);
  b.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
          onBackPressed();
      }
  });

为我工作。