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
Post a Comment