Making a perfect Chromeless Youtube Player in Android -


what created while making chromeless youtube player view here. loading , playing buffering circle plays continuously when video gets completed. can me remove buffering progress when not required , make perfect 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 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 user action or call play().             showmessage("playing");         }          @override         public void onpaused() {             // called when playback paused, either due user action or call pause().             showmessage("paused");         }          @override         public void onstopped() {             // called when playback stops reason other being paused.             showmessage("stopped");         }          @override         public void onbuffering(boolean b) {             showmessage("buffer");         }          @override         public void onseekto(int i) {             // called when jump in playback position occurs, either             // due user scrubbing or call 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 advertisement starts.         }          @override         public void onvideostarted() {             // called when playback of video starts.             showmessage("started");         }          @override         public void onvideoended() {             // called when video reaches end.         }          @override         public void onerror(youtubeplayer.errorreason errorreason) {             // called when 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> 

in oninitializationsuccess(), set playbackeventlistener on player. override onbuffering() , this:

viewgroup ytview = youtubeview; // if using youtubeplayerview viewgroup ytview = (viewgroup)ytplayerfragment.getview(); // if using youtubeplayerfragment progressbar progressbar; try {     // of 2016-02-16, progressbar @ position 0 -> 3 -> 2 in view tree of youtube player fragment/view     viewgroup child1 = (viewgroup)ytview.getchildat(0);     viewgroup child2 = (viewgroup)child1.getchildat(3);     progressbar = (progressbar)child2.getchildat(2); } catch (throwable t) {     // position may change, fallback looking     progressbar = findprogressbar(ytview);     // recommend reporting problem can update code in try branch: direct access more efficient searching }  int visibility = isbuffering ? view.visible : view.invisible; if (progressbar != null) {     progressbar.setvisibility(visibility);     // note store progressbar instance somewhere here, , use later instead of accessing again. } 

make method one:

private progressbar findprogressbar(view view) {         if (view instanceof progressbar) {             return (progressbar)view;         } else if (view instanceof viewgroup) {             viewgroup viewgroup = (viewgroup)view;             (int = 0; < viewgroup.getchildcount(); i++) {                 progressbar res = findprogressbar(viewgroup.getchildat(i));                 if (res != null) return res;             }         }         return null     } 

by way can enable progress when buffering , disable when not.


Comments