YouTubePlayerFragment not working (Play) in CollapsingToolbarLayout

YouTubePlayerFragment not working (Play) in CollapsingToolbarLayout.

I want to play youtube video from youtube android api. Inside CollapsingToolbarLayout, YouTubePlayerFragment is not played, only the thumbnail appears and after 1 second it stops.

I work perfectly inside another layout. I want the material design structure to collapse with the youtube video. Please help me.

<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> 
+6
source share
2 answers

The official documentation reads:

Please note that during video playback this view has a minimum size of 200x110 dp. If you reduce the performance, the video will automatically stop playing. In addition, it is not permitted to overlay this fragment on other views during video playback.

Thus, it is not possible to use YouTubePlayerFragment and YouTubePlayerView in CollapsingToolbarLayout.

PS: If someone succeeded, share the solution. I had the same problem, but I could not solve it.

+1
source

It would be helpful if you posted the logical code or java code and the error log. I am posting Java code, please take a look at this and you can work too ...

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

All Articles