4

CHROMELESS youtube player viewを作成する際に私が作成したものはここにあります。完全に読み込んで再生していますが、ビデオが完成してもバッファリングサークルは連続して再生されます。誰も私がそれが必要とされていないと完全なyoutubeプレーヤーを作るときにバッファリングの進捗状況を削除するのを助けることができますか?あなたのonInitializationSuccess()Androidで完璧なChromeless Youtube Playerを作成する

MainActivity.java

package com.rocky.youtubedemo; 

import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
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; 

public class MainActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener { 

    private static final int RECOVERY_REQUEST = 1; 
    private static String YOUTUBE_API_KEY = ""; 
    private YouTubePlayerView youTubeView; 
    private Context context; 
    private MyPlayerStateChangeListener playerStateChangeListener; 
    private MyPlaybackEventListener playbackEventListener; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     context = this; 

     playerStateChangeListener = new MyPlayerStateChangeListener(); 
     playbackEventListener = new MyPlaybackEventListener(); 

     YOUTUBE_API_KEY = "PLACE_YOUR_API_KEY_HERE"; 

     youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); 
     youTubeView.initialize(YOUTUBE_API_KEY, this); 
    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer player, boolean wasRestored) { 

     player.setPlayerStateChangeListener(playerStateChangeListener); 
     player.setPlaybackEventListener(playbackEventListener); 

     if (!wasRestored) { 
      player.loadVideo("fhWaJi1Hsfo"); // Plays https://www.youtube.com/watch?v=fhWaJi1Hsfo 
      player.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS); 
     } 
    } 

    @Override 
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) { 
     if (errorReason.isUserRecoverableError()) { 
      Toast.makeText(context, errorReason.toString(), Toast.LENGTH_LONG).show(); 
//   errorReason.getErrorDialog(this, RECOVERY_REQUEST).show(); 
     } else { 
      String error = errorReason.toString(); 
      Toast.makeText(context, error, Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == RECOVERY_REQUEST) { 
      // Retry initialization if user performed a recovery action 
      getYouTubePlayerProvider().initialize(YOUTUBE_API_KEY, this); 
     } 
    } 

    private void showMessage(String message) { 
     Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 
    } 

    protected YouTubePlayer.Provider getYouTubePlayerProvider() { 
     return youTubeView; 
    } 

    private final class MyPlaybackEventListener implements YouTubePlayer.PlaybackEventListener { 

     @Override 
     public void onPlaying() { 
      // Called when playback starts, either due to user action or call to play(). 
      showMessage("Playing"); 
     } 

     @Override 
     public void onPaused() { 
      // Called when playback is paused, either due to user action or call to pause(). 
      showMessage("Paused"); 
     } 

     @Override 
     public void onStopped() { 
      // Called when playback stops for a reason other than being paused. 
      showMessage("Stopped"); 
     } 

     @Override 
     public void onBuffering(boolean b) { 
      showMessage("buffer"); 
     } 

     @Override 
     public void onSeekTo(int i) { 
      // Called when a jump in playback position occurs, either 
      // due to user scrubbing or call to seekRelativeMillis() or seekToMillis() 
     } 
    } 

    private final class MyPlayerStateChangeListener implements YouTubePlayer.PlayerStateChangeListener { 

     @Override 
     public void onLoading() { 
      showMessage("loading"); 
     } 

     @Override 
     public void onLoaded(String s) { 
      showMessage("loaded"); 
     } 

     @Override 
     public void onAdStarted() { 
      // Called when playback of an advertisement starts. 
     } 

     @Override 
     public void onVideoStarted() { 
      // Called when playback of the video starts. 
      showMessage("started"); 
     } 

     @Override 
     public void onVideoEnded() { 
      // Called when the video reaches its end. 
     } 

     @Override 
     public void onError(YouTubePlayer.ErrorReason errorReason) { 
      // Called when an error occurs. 
     } 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/youtube_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

</RelativeLayout> 

答えて

7

、プレーヤーのPlaybackEventListenerを設定します。 onBuffering()をオーバーライドして、このような何か:

private ProgressBar findProgressBar(View view) { 
     if (view instanceof ProgressBar) { 
      return (ProgressBar)view; 
     } else if (view instanceof ViewGroup) { 
      ViewGroup viewGroup = (ViewGroup)view; 
      for (int i = 0; i < viewGroup.getChildCount(); i++) { 
       ProgressBar res = findProgressBar(viewGroup.getChildAt(i)); 
       if (res != null) return res; 
      } 
     } 
     return null 
    } 

あなたはそれがバッファリングされたときに進捗を有効にし、そうでないときにそれを無効にすることができ、この方法により、このような

ViewGroup ytView = youTubeView; // if you are using YouTubePlayerView 
ViewGroup ytView = (ViewGroup)ytPlayerFragment.getView(); // if you are using YouTubePlayerFragment 
ProgressBar progressBar; 
try { 
    // As of 2016-02-16, the ProgressBar is at position 0 -> 3 -> 2 in the view tree of the Youtube Player Fragment/View 
    ViewGroup child1 = (ViewGroup)ytView.getChildAt(0); 
    ViewGroup child2 = (ViewGroup)child1.getChildAt(3); 
    progressBar = (ProgressBar)child2.getChildAt(2); 
} catch (Throwable t) { 
    // As its position may change, we fallback to looking for it 
    progressBar = findProgressBar(ytView); 
    // I recommend reporting this problem so that you can update the code in the try branch: direct access is more efficient than searching for it 
} 

int visibility = isBuffering ? View.VISIBLE : View.INVISIBLE; 
if (progressBar != null) { 
    progressBar.setVisibility(visibility); 
    // Note that you could store the ProgressBar instance somewhere from here, and use that later instead of accessing it again. 
} 

メイク方法を。

+0

ありがとう、それは魅力的なように働いています。 –

+0

@ArthTilva私は同じ方法を試みましたが、ビデオの再生中にプログレスバーを表示しています。あなたの指定したonBuffering()メソッドのコードは次のとおりです。http://pastebin.com/sfsJNtgr – Sophie

+1

@RaghavSatyadevそのデモを持って、私は今それを持っていない。 –

関連する問題