2012-08-04 4 views
0

나는 5 초 동안 정확하게 진행하기를 원하는 진행 상황을 가지고있다. 'for'루프를 10 번 반복하고 루프를 돌릴 때마다 진행 막대를 1/10로 증가시킵니다. 2/10 대기에 줄을 증가시킵니다 ...진행률 표시 줄 - 0.5 초 동안 증가?

이/10 1은 0.5 초를 대기에 줄을 증가시킵니다 : 나는 1/10에 대한 기대치를 증가하지만 임 지금 루프를 만들려고위한 코드가 3/10 0.5 초 ... 씩 증가 바는 0.5 초 ... 이

여기

내 코드가 지금까지 작동하지 않고있다, 그것은 10/10에 바 (전체) 진보 등을 기다립니다 . 어떤 아이디어?

고마워요.

   for(int a = 0; a <= 10; a++){ 
       if(mp1.isPlaying()){ // my 5 second wav file 

         int newProgress = pBar1.getProgress() + (pBar1.getMax()/10); 
         if (newProgress < 0) { 
          newProgress = 0; 
          } 
        pBar1.setProgress(newProgress); 
       // pause for 0.5 seconds here// 
       } 

답변

1

Thread.sleep(500);은 0.5 초 동안 일시 중지됩니다. 하지만 UI 스레드가 아닌 다른 스레드에서이 작업을 수행해야합니다. UI 스레드를 잠자기 상태로 설정하면 잠자기 시간이 끝날 때까지 앱의 다른 모든 상호 작용이 잠 깁니다.

+0

입력 해 주셔서 감사합니다. – wagohn

1

당신이 묻는 문제는 0.5 초 동안 쉬는 동안 thread sleep을 만드는 것이 전체 UI가 얼어 버릴 수 있다는 것입니다. 그렇게하지 말아야합니다.

실제 문제는 재생중인 오디오 클립의 경과 시간을 보여주는 진행률 막대를 원하는 것 같습니다. MediaPlayer을 사용하는 경우 getCurrentPositiongetDuration을 사용하여 모든 크기의 오디오 클립에 대해이를 계산할 수 있습니다. 예 :

//Calculate the current clip position as a value between 0 and 100 
int progress = (int) ((float) mp1.getCurrentPosition()/mp1.getDuration() * 100); 
+0

입력 해 주셔서 감사합니다. – wagohn