2010-07-21 11 views
34

Ich möchte Fadeout eine sehr einfache Alpha Animation tun, aber ich kann nicht einen gültigen Weg finden.Android Alpha Animation FadeIn mit Verzögerungen

Die Idee ist, diese Animation über eine Ansicht auszuführen:

  1. alpha 0-1 von 1 Sekunde
  2. Halte alpha bei 1 für 5 Sekunden
  3. alpha 1 bis 0 von 1 Sekunde
  4. hold alpha bei 0 für 5 Sekunden.

    AnimationSet animationSet = new AnimationSet(true); 
    
    Animation animation1 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_in); 
    animation1.setDuration(1000); 
    
    Animation animation2 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_out); 
    animation2.setDuration(1000); 
    animation2.setStartOffset(5000); 
    
    Animation animation3 = new AlphaAnimation(0.0f, 0.0f); 
    animation3.setDuration(4000) 
    animation3.setStartOffset(6000); 
    
    animationSet.add(animation1); 
    animationSet.add(animation2); 
    animationSet.add(animation3); 
    

    etc ..

    aber es Nähte, dass die dritte Animation ein Chaos zu tun:

  5. Start wieder auf 1.

Ich habe versucht, dass mit einem AnimationSet implementieren mit allen alpha-Animationen, nehme an, dass ich dieses eine interne Inkohärenz in der Art und Weise führen, die Android diese Art der Animation zu verwalten.

Irgendeine Idee?

Vielen Dank.

+0

Können Sie mir bitte sagen, ob mein Code gut funktioniert hat? Und bitte akzeptieren Sie die Antwort, wenn ja –

Antwort

101

Ok halten Sie diese 2 Punkte beachten dieses


  • zu lösen Wenn ich 1.0f to 0.0f nach 5 Sekunden mit einer Animation Dauer von 1 Sekunde animiert werden soll, ist dies letztlich eine 1 Sekunde Animation mit einem Pause von 5 Sekunden.

    dies acheive:

    1. setDuration(1000) (eine 1 Sekunde Dauer hat)
    2. setStartOffset(5000)

  • (es nach 5 Sekunden starten) Sie brauchen nur 2 Animationen, die ich für immer oop.

    1. 0.0f to 1.0f mit 5 Sekunden Pause und 1 Sekunde Dauer

    2. 1.0f to 0.0f mit 5 Sekunden Pause und 1 Sekunde Dauer


Und hier ist der Code:

animation1 = new AlphaAnimation(0.0f, 1.0f); 
    animation1.setDuration(1000); 
    animation1.setStartOffset(5000); 

    animation2 = new AlphaAnimation(1.0f, 0.0f); 
    animation2.setDuration(1000); 
    animation2.setStartOffset(5000); 

    textView.startAnimation(animation1); 

jedoch für immer Schleife werde ich AnimationListener verwenden weil repeatCount fehlerhaft ist:

animation1 = new AlphaAnimation(0.0f, 1.0f); 
    animation1.setDuration(1000); 
    animation1.setStartOffset(5000); 

    //animation1 AnimationListener 
    animation1.setAnimationListener(new AnimationListener(){ 

     @Override 
     public void onAnimationEnd(Animation arg0) { 
      // start animation2 when animation1 ends (continue) 
      textView.startAnimation(animation2); 
     } 

     @Override 
     public void onAnimationRepeat(Animation arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationStart(Animation arg0) { 
      // TODO Auto-generated method stub 

     } 

    }); 

    animation2 = new AlphaAnimation(1.0f, 0.0f); 
    animation2.setDuration(1000); 
    animation2.setStartOffset(5000); 

    //animation2 AnimationListener 
    animation2.setAnimationListener(new AnimationListener(){ 

     @Override 
     public void onAnimationEnd(Animation arg0) { 
      // start animation1 when animation2 ends (repeat) 
      textView.startAnimation(animation1); 
     } 

     @Override 
     public void onAnimationRepeat(Animation arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationStart(Animation arg0) { 
      // TODO Auto-generated method stub 

     } 

    }); 

    textView.startAnimation(animation1); 
+0

Perfekte Antwort! Danke vielmals! – David

+0

gut kann es verwenden, um 5 Sekunden warten und dann etwas zeigen? um die Verzögerung zu beheben. – mehmet

14

Es gibt eine einfachere Lösung dafür.

Nehmen wir an, dass Ihre Ansicht im Status GONE ist. So animieren Sie die Sichtbarkeit:

yourView.setVisibility(View.VISIBLE); 
yourView.animate().alpha(1).setDuration(300); 

Auf die gleiche Weise können Sie Animationslistener hinzufügen.

Dies funktioniert auch für Maßstab und Übersetzung Animationen.

+1

Sehr gut. Vielen Dank. – paakjis

Verwandte Themen