2013-08-01 2 views
0

작동하지 나는이 일부 격차, 루프에서 작업해야 objectAnimator는 Thread.sleep를 안드로이드

final ObjectAnimator anim = (ObjectAnimator) AnimatorInflater 
       .loadAnimator(getActivity(), R.anim.flip); 
     anim.setTarget(tvDebitAmount); 
     anim.setDuration(3000); 
     anim.start(); 

있습니다. 이 애니메이션이 끝나면 4000ms를 기다린 후에 anim.start를 다시 호출해야합니다.

나는 그것을 무한 루프에 넣고, anim.start() 뒤에 thread.sleep()을 넣으려고했다. 작동하지 않습니다 (전체 화면이 응답하지 않음). 어떻게 기다리거나 잠을 자게 할 수 있습니까?

+0

Thread.sleep는 사용자가 호출 한 스레드를 잠자기 상태로 만듭니다. GUI 스레드를 잠자기하면 화면 업데이트 또는 이벤트 응답과 같은 다른 작업을 수행 할 수 없습니다. 즉, Thread.sleep이 올바르게 작동하고 있습니다. 이벤트 처리에서 돌아올 때까지 화면이 업데이트되지 않습니다. –

답변

3

Thread.sleep()은 UI 스레드 인 현재 스레드를 차단하므로 사용자가 원하지 않습니다.

애니메이션을 원하는대로 작동 시키려면 4000ms 이상 실행되는 애니메이션 세트로 둘러 싸십시오. 실제 애니메이션 세트는 여전히 3000ms 밖에 걸리지 않습니다. 그런 다음 애니메이션 반복 모드를 RESTART으로 설정하고 반복 횟수를 INFINITE으로 설정하십시오.

+0

감사합니다. anim.setRepeatCount (ObjectAnimator.INFINITE); 나를 도와 주었다. 나는 어떤 고리도 사용하지 않았다. 아직도 나는 그것을 반복하기 전에 기다릴 수 없었다. setDuration을 늘리면 애니메이션 속도가 느려지 게됩니다. –

+0

해답을 명확히하기 위해 업데이트 됨 : 7000ms 동안 실행되는 애니메이션 세트로 애니메이션을 랩핑하고 3000ms 애니메이션을 그 안에 넣습니다. – laalto

1

ScheduledThreadPoolExecutor을 사용하거나 Timer을 사용하는 것이 좋습니다. 그래서 메인 스레드를 방해하지 않고 별도의 스레드에서 작동합니다. 타이머 here에 대한 예제를 확인하십시오.