2015-09-19 18 views
6

YouTubePlayerFragment không hoạt động (Phát) trong CollapsingToolbarLayout.YouTubePlayerFragment không hoạt động (Đang phát) trong CollapsingToolbarLayout

Tôi muốn phát video youtube từ api android youtube. Bên trong CollapsingToolbarLayout, YouTubePlayerFragment không phát, chỉ hình thu nhỏ đến và sau 1 giây, nó sẽ dừng lại.

Tôi hoạt động tốt trong bố cục khác. Tôi muốn bố cục thiết kế material design thu gọn với video youtube. Làm ơn giúp tôi.

<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> 
+0

Có vẻ như CoordinatorLayout gây ra lỗi AUTHORIZED_OVERLAY. bạn đã giải quyết vấn đề chưa? –

Trả lời

0

Sẽ hữu ích nếu bạn đã đăng mã logic hoặc mã java và nhật ký lỗi. Tôi gửi bài mã java, xin hãy nhìn vào một điều này có thể làm việc cho bạn quá ...

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

Cảm ơn bạn đã trả lời nhưng tôi muốn phát đoạn youtube bên trong CollapsingToolbarLayout. Bên ngoài này, nó hoạt động tốt. nhưng tôi muốn người dùng có CollapsingToolbarLayout (được đề cập trong câu hỏi trên xml) – Mangal

1

Các official documentation nói:

Lưu ý rằng trong khi video đang chơi, Xem này có một kích thước tối thiểu 200x110 dp. Nếu bạn làm cho chế độ xem nhỏ hơn, video sẽ tự động ngừng phát. Ngoài ra, không được phép che phủ chế độ xem đoạn này với các chế độ xem khác trong khi video đang phát.

Vì vậy, không có cách nào để có được để làm việc YouTubePlayerFragment và YouTubePlayerView trong CollapsingToolbarLayout.

PS: Nếu ai đó quản lý để làm điều đó - hãy chia sẻ giải pháp. Tôi đã có cùng một vấn đề, nhưng tôi không thể giải quyết nó.

+0

Bạn có giải quyết được vấn đề này không? –

+1

@AbhishekV Thật không may là không. YouTubeView không được trùng lặp với các chế độ xem khác. Đây là giải pháp làm việc duy nhất. – Mikhail

Các vấn đề liên quan