Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义youtube播放器不';t更新seekbar_Android_Android Mediaplayer - Fatal编程技术网

Android 自定义youtube播放器不';t更新seekbar

Android 自定义youtube播放器不';t更新seekbar,android,android-mediaplayer,Android,Android Mediaplayer,我创建了自己的播放器布局,并使用Youtube api来显示视频内容,但是当视频开始时,我的seekbar不会更新,并保持不变。我认为问题出在mseekbarchangeelistener内部,但我不确定 这是我的密码: public class ItemDetails extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener,View.OnClickListener { private f

我创建了自己的播放器布局,并使用Youtube api来显示视频内容,但是当视频开始时,我的seekbar不会更新,并保持不变。我认为问题出在
mseekbarchangeelistener
内部,但我不确定

这是我的密码:

  public class ItemDetails extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener,View.OnClickListener {

    private final static String TAG = "ItemDetails";

    @BindView(R.id.item_title)TextView itemTitle;
    @BindView(R.id.item_date)TextView itemDate;
    @BindView(R.id.item_plot)TextView itemPlot;
    @BindView(R.id.item_short_description)TextView itemShortDescription;
    @BindView(R.id.backdop_image_details)ImageView imageBackdrop;
    @BindView(R.id.tv_more)TextView tvSeeMore;
    @BindView(R.id.trailer_video)YouTubePlayerView traileVideo;
    @BindView(R.id.video_control)LinearLayout videoControlLayout;
    @BindView(R.id.play_time)TextView mPlayTimeTextView;
    @BindView(R.id.video_seekbar)SeekBar mSeekBar;

    YouTubePlayer mPlayer;

    private Handler mHandler = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_item_details);

        ButterKnife.bind(this);

        findViewById(R.id.play_video).setOnClickListener(this);
        findViewById(R.id.pause_video).setOnClickListener(this);

        mSeekBar.setMax(100);
        mSeekBar.setProgress(0);
        mSeekBar.setOnSeekBarChangeListener(mVideoSeekBarChangeListener);
        mHandler = new Handler();

    }

    @OnClick(R.id.back_arrow_detail)void backArrowClick() {
        onBackPressed();
    }


    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
        if(youTubePlayer != null) {
            mPlayer = youTubePlayer;

            displayCurrentTime();

            // start buffering
            if(!b) {
                youTubePlayer.cueVideo(trailerKey);
            }

            // set style and show control layout
            youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS);
            videoControlLayout.setVisibility(View.VISIBLE);

            youTubePlayer.setPlayerStateChangeListener(playerStateChangeListener);
            youTubePlayer.setPlaybackEventListener(playbackEventListener);
        }
    }

    private YouTubePlayer.PlaybackEventListener playbackEventListener = new YouTubePlayer.PlaybackEventListener() {
        @Override
        public void onPlaying() {
            mHandler.postDelayed(runnable,100);
            displayCurrentTime();
        }

        @Override
        public void onPaused() {
            mHandler.removeCallbacks(runnable);
        }

        @Override
        public void onStopped() {
            mHandler.removeCallbacks(runnable);
        }

        @Override
        public void onBuffering(boolean b) {

        }

        @Override
        public void onSeekTo(int i) {
            mHandler.postDelayed(runnable,100);
        }
    };

    private YouTubePlayer.PlayerStateChangeListener playerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() {
        @Override
        public void onLoading() {

        }

        @Override
        public void onLoaded(String s) {

        }

        @Override
        public void onAdStarted() {

        }

        @Override
        public void onVideoStarted() {
            displayCurrentTime();
        }

        @Override
        public void onVideoEnded() {

        }

        @Override
        public void onError(YouTubePlayer.ErrorReason errorReason) {

        }
    };

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
        Log.d(TAG,youTubeInitializationResult.toString());
    }


    SeekBar.OnSeekBarChangeListener mVideoSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            long lengthPlayed = (mPlayer.getDurationMillis() * progress) / 100;
            mPlayer.seekToMillis((int) lengthPlayed);
            seekBar.setProgress(progress);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    };


    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.play_video:
                if(mPlayer != null && !mPlayer.isPlaying()) {
                    mPlayer.play();
                }
                break;
            case R.id.pause_video:
                if(mPlayer != null && mPlayer.isPlaying()) {
                    mPlayer.pause();;
                }
                break;
        }
    }

    private void displayCurrentTime() {
        if (null == mPlayer) return;
        String formattedTime = formatTime(mPlayer.getDurationMillis() - mPlayer.getCurrentTimeMillis());
        mPlayTimeTextView.setText(formattedTime);
    }

    private String formatTime(int millis) {
        int seconds = millis / 1000;
        int minutes = seconds / 60;
        int hours = minutes / 60;

        return (hours == 0 ? "--:" : hours + ":") + String.format("%02d:%02d", minutes % 60, seconds % 60);
    }


    private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            displayCurrentTime();
            mHandler.postDelayed(this, 100);
        }
    };
}

对于所有正在寻找解决方案的人:

  • 在runnable中设置seekbar进度:
  • private Runnable Runnable=new Runnable(){ @凌驾 公开募捐{ displayCurrentTime(); //百分比方面的进展 int progress=mPlayer.getCurrentTimeMillis()*100/mPlayer.getDurationMillis(); mSeekBar.setProgress(进度); mHandler.postdayed(这个,100); } };
  • 由于这将启动OnSeekBarChangeListener,因此您需要在以下情况下添加一个附加选项:
  • SeekBar.OnSeekBarChangeListener mVideoSeekBarChangeListener=新建SeekBar.OnSeekBarChangeListener(){ @凌驾 public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser){ //仅当用户更改进度时 如果(来自用户){ 长时间播放=(mPlayer.getDurationMillis()*进度)/100; mPlayer.seekToMillis((int)lengthPlayed); } } @凌驾 开始跟踪触摸时的公共无效(SeekBar SeekBar){ } @凌驾 TopTrackingTouch(SeekBar SeekBar)上的公共无效{ } };
    )()

    自定义youtube播放器无铬风格-设置搜索栏进度和搜索栏跟踪向前/向后触摸

    mSeekBar = (SeekBar) findViewById(R.id.video_seekbar);
    
    mSeekBar.setOnSeekBarChangeListener(mVideoSeekBarChangeListener)
    
    SeekBar.OnSeekBarChangeListener mVideoSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    
        }
    
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
    
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            long lengthPlayed = (mYouTubePlayer.getDurationMillis() * seekBar.getProgress()) / 100;
            mYouTubePlayer.seekToMillis((int) lengthPlayed);
        }
    };
    
    private Runnable runnable = new Runnable() {
        @Override
        public void run(){
            displayCurrentTime();
            mHandler.postDelayed(this, 100);
        }
    };
    
    
     private void displayCurrentTime() {
        if (null == mYouTubePlayer) return;
        String formattedTime = formatTime(mYouTubePlayer.getDurationMillis() - mYouTubePlayer.getCurrentTimeMillis());
        play_timetv.setText(formattedTime);
        playPercent = (int) (((float) mYouTubePlayer.getCurrentTimeMillis()/(float) mYouTubePlayer.getDurationMillis()) * 100);
        System.out.println("get youtube displayTime 2 : "+playPercent);
        // update live progress
        mSeekBar.setProgress(playPercent, true);
    }
    

    嗨,非常感谢你的回答。你能告诉我搜索栏的最大进度吗。如何设置搜索栏的最大进度。 SeekBar.OnSeekBarChangeListener mVideoSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { //Only when the user change the progress if(fromUser){ long lengthPlayed = (mPlayer.getDurationMillis() * progress) / 100; mPlayer.seekToMillis((int) lengthPlayed); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } };
    mSeekBar = (SeekBar) findViewById(R.id.video_seekbar);
    
    mSeekBar.setOnSeekBarChangeListener(mVideoSeekBarChangeListener)
    
    SeekBar.OnSeekBarChangeListener mVideoSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    
        }
    
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
    
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            long lengthPlayed = (mYouTubePlayer.getDurationMillis() * seekBar.getProgress()) / 100;
            mYouTubePlayer.seekToMillis((int) lengthPlayed);
        }
    };
    
    private Runnable runnable = new Runnable() {
        @Override
        public void run(){
            displayCurrentTime();
            mHandler.postDelayed(this, 100);
        }
    };
    
    
     private void displayCurrentTime() {
        if (null == mYouTubePlayer) return;
        String formattedTime = formatTime(mYouTubePlayer.getDurationMillis() - mYouTubePlayer.getCurrentTimeMillis());
        play_timetv.setText(formattedTime);
        playPercent = (int) (((float) mYouTubePlayer.getCurrentTimeMillis()/(float) mYouTubePlayer.getDurationMillis()) * 100);
        System.out.println("get youtube displayTime 2 : "+playPercent);
        // update live progress
        mSeekBar.setProgress(playPercent, true);
    }