2012-03-20 4 views
2

간단한 애니메이션을 만들고 싶습니다. 내 로고는 4 개 부분으로 나누어 져 있습니다 :여러보기에서 애니메이션 동기화

1 | 2

3 | 난에 fadein 아웃 각 부분을 원하는 4

하지만, 다른 후 하나를 : 1 -> 2 -> 4 -> 3 -> 1 ... 나는이 아무 문제가 없지만, 가끔 내 애니메이션이 동기화되지 않고 4 개 개의 부품이 동시에 애니메이션 :

final ImageView logo1 = (ImageView) v.findViewById(R.id.logo1); 
    logo1.clearAnimation(); 
    final ImageView logo2 = (ImageView) v.findViewById(R.id.logo2); 
    logo2.clearAnimation(); 
    final ImageView logo3 = (ImageView) v.findViewById(R.id.logo3); 
    logo3.clearAnimation(); 
    final ImageView logo4 = (ImageView) v.findViewById(R.id.logo4); 
    logo4.clearAnimation(); 

    final Animation anim1 = AnimationUtils.loadAnimation(c, R.anim.animlogo); 
    anim1.setFillAfter(true); 
    anim1.setStartOffset(0); 
    final Animation anim2 = AnimationUtils.loadAnimation(c, R.anim.animlogo); 
    anim2.setStartOffset(anim1.getDuration()); 
    anim2.setFillAfter(true); 
    final Animation anim3 = AnimationUtils.loadAnimation(c, R.anim.animlogo); 
    anim3.setStartOffset(anim1.getDuration()+anim2.getDuration()); 
    anim3.setFillAfter(true); 
    final Animation anim4 = AnimationUtils.loadAnimation(c, R.anim.animlogo); 
    anim4.setStartOffset(anim1.getDuration()+anim2.getDuration()+anim3.getDuration()); 
    anim4.setFillAfter(true); 

    anim1.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) {} 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      anim1.setStartOffset(anim2.getDuration()+anim4.getDuration()+anim3.getDuration()); 
      logo1.startAnimation(anim1); 
     } 
    }); 

    anim2.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) {} 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      anim2.setStartOffset(anim1.getDuration()+anim4.getDuration()+anim3.getDuration()); 
      logo2.startAnimation(anim2); 
     } 
    }); 

    anim3.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) {} 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      anim3.setStartOffset(anim2.getDuration()+anim4.getDuration()+anim1.getDuration()); 
      logo4.startAnimation(anim3); 
     } 
    }); 

    anim4.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) {} 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      anim4.setStartOffset(anim2.getDuration()+anim1.getDuration()+anim3.getDuration()); 
      logo3.startAnimation(anim4); 
     } 
    }); 

    logo1.startAnimation(anim1); 
    logo2.startAnimation(anim2); 
    logo4.startAnimation(anim3); 
    logo3.startAnimation(anim4); 

    anim1.startNow();anim2.startNow();anim3.startNow();anim4.startNow(); 

어떤 생각?

+0

첫 번째보기의 OnAnimationEnd에서 두 번째보기의 애니메이션 시작. http://stackoverflow.com/a/4112620/2624806 첫 번째보기에 애니메이션을 삭제하는 데 도움이됩니다. – CoDe

답변

1

시작 만 anim1 :

logo1.startAnimation(anim1); 

및 anim1의 AnimationListener의 onAnimationEnd에서

할 :

logo2.startAnimation(anim2); 

anim1이 완료되기 전에 anim2이 시작되지 않습니다 이쪽으로.

관련 문제