title: Synchronize animation on multiple views
body: <p>I would like to make a simple animation. My logo is divided in 4 parts :</p>
  <blockquote>
  <p>1|2</p>
  <p>3|4</p>
  </blockquote>
  <p>I would like to fadein-out each part, but only one after the other : 1 -&gt; 2 -&gt; 4 -&gt; 3 -&gt; 1...
  I have no problem with this, but sometimes my animation is not synchronized and the 4 parts animate simultaneously :</p>
  <pre><code>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();
  </code></pre>
  <p>Any idea ?</p>