我有一个表面视图,和一个媒体播放器来流式传输视频。比方说,10秒后,我需要使一个特定的布局可见。因此,有没有什么事件可以持续监控搜索栏的进度,并在适当的时候触发事件?
详细解释:假设我有一段10分钟的视频正在播放。在第10秒结束时,布局应在视图中可见。我该如何实现这一点?
发布于 2013-07-05 15:01:53
我建议你看看OnSeekBarChangeListener#OnProgressChange http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.html
另一种方法是编写一个监视视频当前位置的处理程序,然后将视图设置为在当前位置超过10秒时可见。之后停止处理程序。
VideoTimerHandler videoTimerHandler = new VideoTimerHandler();
videoTimerHandler.playVideoTimer();
// Handler that monitor video progress every 1 sec
private class VideoTimerHandler extends Handler {
private static final String TAG = "VideoTimerHandler";
private final int VIDEO_TIMER_PERIOD = 1000;
public void playVideoTimer(){
this.sendEmptyMessage(0);
}
public void stopVideoTimer(){
this.removeMessages(0);
}
public void handleMessage(Message msg){
if (player.getCurrentPosition() > 10){
yourView.setVisibility(View.VISIBLE);
}
else{
// check again after 1 sec
this.sendEmptyMessageDelayed(0, VIDEO_TIMER_PERIOD);
}
}
}发布于 2014-12-05 19:03:19
First方法
为什么您不想使用与您的SeekBar关联的MediaPlayer?MediaPlayer公开了一个onCompletion回调:
OnCompletionListener cListener = new OnCompletionListener(){
public void onCompletion(MediaPlayer mp){
//do something
}
};
mediaPlayer.setOnCompletionListener(cListener);第二种方法
为此,您应该使用Handler's postDelayed函数。它将在main UI thread上以指定的延迟运行您的代码,因此您将能够更新UI控件。
private int mInterval = 10*1000; // 10 seconds by default,or calculate it mediaplayer.getDuration(); //it is in milliseconds
private Handler mHandler;
@Override
protected void onCreate(Bundle bundle) {
...
mHandler = new Handler();
}
Runnable mStatusChecker = new Runnable() {
@Override
public void run() {
showDesireLayout(); //change visibility in this function.
//mHandler.postDelayed(mStatusChecker, mInterval); //uncomment it if you want to repeat it after equal intervals of time.
}
};
void startRepeatingTask() {
mStatusChecker.run();
}
void stopRepeatingTask() {
mHandler.removeCallbacks(mStatusChecker);
}只需调用startRepeatingTask();即可
https://stackoverflow.com/questions/17482696
复制相似问题