0

我有一个表面视图和一个媒体播放器来流式传输视频。说 10 秒后,我需要使特定的布局可见。为此,是否有任何事件可以持续监控搜索栏的进度并在适当的时间触发事件?

详细解释:假设我有一个 10 分钟的视频正在播放。在第 10 秒结束时,布局应该在视图中可见。我如何实现这一目标?

4

2 回答 2

0

我建议你看看 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);
        }
    }
}
于 2013-07-05T07:01:52.920 回答
0

第一种方法

为什么不想使用与 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();

于 2014-12-05T11:03:19.007 回答