【问题标题】:Android: Add button to YouTubePlayerViewAndroid:将按钮添加到 YouTubePlayerView
【发布时间】:2015-06-26 13:01:55
【问题描述】:

我想向YouTubePlayerView 添加一个按钮,但不知道这样做的最佳方式。我希望该按钮仅在用户单击屏幕以调出 youtube 控件(播放/暂停、时间线、共享等)时出现,该控件会在几秒钟后消失,就像控件消失一样。我已经查看了ViewGroupOverlay,但不确定这是否是最好的方法,并且我不确定当控件可用时如何仅将按钮添加到叠加层中。感觉就像我必须重写 YouTubePlayerYouTubePlayerView 函数之一才能知道控件何时可见,但我只是在这里做一个假设。我对 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();
}

}

【问题讨论】:

    标签: java android youtube-api android-view android-youtube-api


    【解决方案1】:

    无法按照 Google 的规定在播放器上方添加按钮作为叠加层:

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

    请注意,在播放视频时,此视图的最小尺寸为 200x110 dp。如果您将视图缩小,视频将 自动停止播放。此外,不允许覆盖 在播放视频时与其他视图一起观看。

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

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

    替代方案:使用 WebView 并将其嵌入。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

          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();
              }
          });
        

        为我工作。

        【讨论】:

          猜你喜欢
          • 2012-09-11
          • 1970-01-01
          • 1970-01-01
          • 2018-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-06
          相关资源
          最近更新 更多