2013-07-05 37 views
0

我有一個表面視圖和一個媒體播放器來流式傳輸視頻。 10秒後說,我需要使一個特定的佈局可見。 因爲這是否有任何事件可以持續監視搜索欄的進度並在適當的時間點火事件?如何在android中查找酒吧到達特定時間時觸發事件

詳細解釋: 假設我有一個正在播放10分鐘的視頻。 在10秒結束時,應在視圖中顯示佈局。 我該如何做到這一點?

回答

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

你能PLS代碼擬定第二部分pls..i'm這裏一個新手。謝謝 – user2488310

+0

onseekbarchangelistener僅在用戶更改查找欄時纔會調用,但對於我來說,在達到第10秒的時刻,應該觸發事件 – user2488310

+0

我添加示例代碼。讓我知道,如果它幫助 – Ethan

0

第一種方法

爲什麼你不希望使用與您的搜索欄相關的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();

相關問題