gpt4 book ai didi

android - 自定义 youtube 播放器不更新搜索栏

转载 作者:太空狗 更新时间:2023-10-29 14:43:47 26 4
gpt4 key购买 nike

我创建了自己的播放器布局并使用 Youtube api 来显示视频内容,但是当视频开始时,我的搜索栏没有更新并保持修复。我认为问题出在 mSeekBarChangeListener 内部,但我不确定。

这是我的代码:

  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);
}
};
}

最佳答案

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

  1. 在 runnable 中设置 seekbar 进度:
     private Runnable runnable = new Runnable() {        @Override        public void run() {            displayCurrentTime();            //Progress in percentage             int progress = mPlayer.getCurrentTimeMillis() * 100 / mPlayer.getDurationMillis();            mSeekBar.setProgress(progress);            mHandler.postDelayed(this, 100);        }    };
  1. 由于这将启动 OnSeekBarChangeListener,因此您需要添加一个额外的条件:
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) {        }    };

;)

关于android - 自定义 youtube 播放器不更新搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43317319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com