0
나는 비동기 메시지를 다루는 핸들러를 포함하는 액티비티를 가지고있다. 메시지를 받으면 애니메이션을 트리거하고 싶습니다. 그 후에 다른 메시지를 받으면 마지막 애니메이션이 끝난 후에야 다른 애니메이션을 트리거하고 싶습니다.비동기 이벤트를 사용하여 일련의 애니메이션을 어떻게 트리거 할 수 있습니까?
가장 확실한 방법은 무엇입니까?
나는 비동기 메시지를 다루는 핸들러를 포함하는 액티비티를 가지고있다. 메시지를 받으면 애니메이션을 트리거하고 싶습니다. 그 후에 다른 메시지를 받으면 마지막 애니메이션이 끝난 후에야 다른 애니메이션을 트리거하고 싶습니다.비동기 이벤트를 사용하여 일련의 애니메이션을 어떻게 트리거 할 수 있습니까?
가장 확실한 방법은 무엇입니까?
애니메이션 수신기를 사용하여 애니메이션 완료 시점을 확인할 수 있습니다. 다음과 같은 것 :
Animation a = AnimationUtils.loadAnimation(this.getContext(), R.anim.animation);
a.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
if(receivedMessage == true){
startNextAnimation();
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
startNextAnimation()은 다음 애니메이션을 어떻게 선택해야합니까? 예를 들어 새 메시지를 받으면 차단 대기열에 애니메이션을 넣고 거기에서 선택할 수 있습니다. 그런 다음 메서드가 호출 될 때 다음 메시지가 아직 도착하지 않으면 어떻게됩니까? 나는 그것이 작동하지 않을 것이라고 생각한다. – InfiniteSnow
리스너를 만들 수있다. onMessageReceived() 및 일어날 일에 대한 논리를 처리합니다. onMessageReceived에서 "receivedMessage = true"로 설정합니다. 현재 애니메이션을 계속 진행할 수 있습니다. 애니메이션이 이미 완료된 경우 메시지를 받으면 다음 애니메이션을 시작하는 것이 좋습니다. (애니메이션을 추적하고 애니메이션이 발생하지 않으면 null로 설정할 수 있습니다.) 예 : if (currentAnimation == null) startNewAnimation() –