【问题标题】:YouTubePlayerFragment not working(Playing) in CollapsingToolbarLayoutYouTubePlayerFragment 在 CollapsingToolbarLayout 中不起作用(正在播放)
【发布时间】:2015-09-19 05:27:49
【问题描述】:

YouTubePlayerFragment 在 CollapsingToolbarLayout 中不起作用(正在播放)。

我想从 youtube android api 播放 youtube 视频。在 CollapsingToolbarLayout 内部,YouTubePlayerFragment 不播放,只有缩略图出现,1 秒后停止。

我在其他布局中工作正常。我想要带有 youtube 视频的材料设计折叠布局。请帮帮我。

  <android.support.design.widget.CoordinatorLayout
    android:id="@+id/root_coordinator"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">


    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        android:fitsSystemWindows="true">



        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">




            <!--<ImageView
                android:id="@+id/image"
                android:layout_width="match_parent"
                android:layout_height="250dp"
                android:src="@drawable/ic_launcher"
                android:visibility="visible"
                app:layout_collapseMode="parallax" />-->
            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/layoutYoutube"
                android:layout_width="match_parent"
                android:layout_height="250dp"
                android:visibility="visible"
                app:layout_collapseMode="parallax">
                <fragment
                    android:id="@+id/youtube_fragment"
                    android:name="com.google.android.youtube.player.YouTubePlayerFragment"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
            </LinearLayout>



            <android.support.v7.widget.Toolbar
                android:id="@+id/app_bar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                app:layout_collapseMode="pin">


                <include
                    layout="@layout/toolbar_layout"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />

            </android.support.v7.widget.Toolbar>


        </android.support.design.widget.CollapsingToolbarLayout>



    </android.support.design.widget.AppBarLayout>


    <FrameLayout
        android:id="@+id/frameContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="1dp"
        android:background="@android:color/white"
        android:paddingTop="2dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

    </FrameLayout>




</android.support.design.widget.CoordinatorLayout>

【问题讨论】:

  • 似乎 CoordinatorLayout 导致错误 AUTHORIZED_OVERLAY。你的问题解决了吗?

标签: android youtube-api android-videoview android-collapsingtoolbarlayout


【解决方案1】:

official documentation 说:

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

所以没有办法开始工作 YouTubePlayerFragment 和 CollapsingToolbarLayout 中的 YouTubePlayerView。

PS:如果有人设法做到了 - 分享解决方案。我有同样的问题,但我无法解决。

【讨论】:

  • @AbhishekV 不幸的是没有。 YouTubeView 不应与其他视图重叠。这是唯一可行的解​​决方案。
【解决方案2】:

如果您发布了逻辑代码或 Java 代码和错误日志,将会很有帮助。我正在发布 java 代码,请看看这个可能对你也有用...

public class YoutubeActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener{

    public static final String API_KEY = "xxxxxxxxxx";
    public static final String VIDEO_ID = "xxxxxxx";

    private YouTubePlayer youTubePlayer;
    private YouTubePlayerFragment youTubePlayerFragment;
    private TextView textVideoLog;
    private Button btnViewFullScreen;

    private static final int RQS_ErrorDialog = 1;

    private MyPlayerStateChangeListener myPlayerStateChangeListener;
    private MyPlaybackEventListener myPlaybackEventListener;

    String log = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_youtube);

        youTubePlayerFragment = (YouTubePlayerFragment)getFragmentManager()
                .findFragmentById(R.id.youtubeplayerfragment);
        youTubePlayerFragment.initialize(API_KEY, this);

        textVideoLog = (TextView)findViewById(R.id.videolog);

        myPlayerStateChangeListener = new MyPlayerStateChangeListener();
        myPlaybackEventListener = new MyPlaybackEventListener();

        btnViewFullScreen = (Button)findViewById(R.id.btnviewfullscreen);
        btnViewFullScreen.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View arg0) {
                youTubePlayer.setFullscreen(true);
            }});
        Button btnPlay = (Button) findViewById(R.id.btnplay);
        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(youTubePlayer.isPlaying())
                    youTubePlayer.pause();
                else
                    youTubePlayer.play();
            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_splash_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        Log.e("id", id+"");
        switch(item.getItemId()){
            case R.id.action_share:
                break;
            case 16908332:
                onBackPressed();
                break;
        }
        return super.onOptionsItemSelected(item);
    }


    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youtube, boolean b) {
        youTubePlayer = youtube;
        Toast.makeText(getApplicationContext(), "YouTubePlayer.onInitializationSuccess()", Toast.LENGTH_LONG).show();

        youtube.setPlayerStateChangeListener(myPlayerStateChangeListener);
        youtube.setPlaybackEventListener(myPlaybackEventListener);

        if (!b) {
            youTubePlayer.cueVideo(VIDEO_ID);
        }
    }

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
        if (youTubeInitializationResult.isUserRecoverableError()) {
            youTubeInitializationResult.getErrorDialog(this, RQS_ErrorDialog).show();
        } else {
            Toast.makeText(this,"YouTubePlayer.onInitializationFailure(): " + youTubeInitializationResult.toString(),Toast.LENGTH_LONG).show();
        }
    }

    private final class MyPlayerStateChangeListener implements YouTubePlayer.PlayerStateChangeListener {

        private void updateLog(String prompt){
            log +=  "MyPlayerStateChangeListener" + "\n" +prompt + "\n\n=====";
            textVideoLog.setText(log);
        };

        @Override
        public void onAdStarted() {
            updateLog("onAdStarted()");
        }

        @Override
        public void onError(
                com.google.android.youtube.player.YouTubePlayer.ErrorReason arg0) {
            updateLog("onError(): " + arg0.toString());
        }

        @Override
        public void onLoaded(String arg0) {
            updateLog("onLoaded(): " + arg0);
        }

        @Override
        public void onLoading() {
            updateLog("onLoading()");
        }

        @Override
        public void onVideoEnded() {
            updateLog("onVideoEnded()");
        }

        @Override
        public void onVideoStarted() {
            updateLog("onVideoStarted()");
        }

    }

    private final class MyPlaybackEventListener implements YouTubePlayer.PlaybackEventListener {

        private void updateLog(String prompt){
            log +=  "MyPlaybackEventListener" + "\n-" +
                    prompt + "\n\n=====";
            textVideoLog.setText(log);
        };

        @Override
        public void onBuffering(boolean arg0) {
            updateLog("onBuffering(): " + String.valueOf(arg0));
        }

        @Override
        public void onPaused() {
            updateLog("onPaused()");
        }

        @Override
        public void onPlaying() {
            updateLog("onPlaying()");
        }

        @Override
        public void onSeekTo(int arg0) {
            updateLog("onSeekTo(): " + String.valueOf(arg0));
        }

        @Override
        public void onStopped() {
            updateLog("onStopped()");
        }

    }

【讨论】:

  • 感谢您的回复,但我想在 CollapsingToolbarLayout 中播放 youtube 片段。除此之外,它工作正常。但我想使用 CollapsingToolbarLayout(在上面的问题 xml 中提到)
猜你喜欢
  • 2017-04-30
  • 2015-01-05
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多