0

サーフェス ビューと、ビデオをストリーミングするためのメディア プレーヤーがあります。10 秒後に、特定のレイアウトを表示する必要があるとします。そのために、シークバーの進行状況を常に監視し、適切なタイミングでイベントを発生させることができるイベントはありますか?

詳細な説明: 10 分間再生されているビデオがあるとします。10 秒の終わりに、レイアウトがビューに表示されるようにする必要があります。どうすればこれを達成できますか?

4

2 に答える 2

0

OnSeekBarChangeListener#OnProgressChange http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.htmlをご覧になることをお勧めします。

もう 1 つの方法は、ビデオの現在の位置を監視する Handler を作成し、現在の位置が 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);

2番目の方法

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 に答える