2016-04-08 7 views
0

Ich mache eine Anwendung auf Android, die eines der beiden verfügbaren Bilder beim Klicken auf eine Schaltfläche erzeugt und nach einer Dauer von 1 Sekunde soll das Bild verschwinden, was dem Benutzer die Wahlmöglichkeit gibt Klicken Sie erneut auf die Schaltfläche.Animation löst nur das erste Mal aus

Das Problem ist, dass die Animation reibungslos auf den ersten Tastendruck funktioniert (d. H. Ein Bild erzeugt und dann verschwindet), aber auf der zweiten Taste drücken, das Bild sitzt nur da und nichts passiert. Ich kann nicht herausfinden warum.

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final ImageView firstimage = (ImageView)findViewById(R.id.imageView2); 
     final ImageView secondimage = (ImageView)findViewById(R.id.imageView1); 
     final Button clickMe = (Button)findViewById(R.id.button); 
     final TextView image_description = (TextView)findViewById(R.id.textView); 
     image_description.setText(""); 

     final Animation fadeout = new AlphaAnimation(1,0); 
     fadeout.setStartOffset(1000); 
     fadeout.setDuration(1000); 
     secondimage.setAnimation(fadeout); 
     firstimage.setAnimation(fadeout); 
     image_description.setAnimation(fadeout); 
     secondimage.setVisibility(View.GONE); 
     firstimage.setVisibility(View.GONE); 
     image_description.setVisibility(View.GONE); 
     clickMe.setVisibility(View.VISIBLE);  

     fadeout.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       System.out.println("Animation block"); 
       secondimage.setVisibility(View.GONE); 
       firstimage.setVisibility(View.GONE); 
       image_description.setVisibility(View.GONE); 
       clickMe.setVisibility(View.VISIBLE); 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { } 
     }); 

     clickMe.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       System.out.println("Click block"); 
       Random r = new Random(); 
       int i = r.nextInt(2); 
       clickMe.setVisibility(View.GONE); 
       if(i == 0) { 
        secondimage.setVisibility(View.VISIBLE); 
        image_description.setText("LOOK it's a CAT"); 
        image_description.setVisibility(View.VISIBLE); 
        secondimage.setAnimation(fadeout); 
        image_description.setAnimation(fadeout); 
       } else { 
        firstimage.setVisibility(View.VISIBLE); 
        image_description.setText("LOOK it's a DOG"); 
        image_description.setVisibility(View.VISIBLE); 
        firstimage.setAnimation(fadeout); 
        image_description.setAnimation(fadeout); 
       }  
      } 
     });  
    } 

Die Logs in etwa so aussehen:

Click Block 
Animation Block 
Click Block 
Click Block 
Click Block 
Click Block 

Jede Idee, warum der Code nicht mit dem Animationsblock weiter auf den 2. Klick erreicht?

+0

Nicht 100% sicher, aber ich denke, Sie müssen Ihren Animationszustand löschen, indem Sie '.clearAnimation()' in Ihren Ansichten aufrufen, wenn Sie mit der Animation fertig sind oder bevor Sie wieder animieren. – ChrisStillwell

+0

Versucht, es hat nicht funktioniert. – Piyush

Antwort

2

In Ordnung. Ich konnte meine eigene Anfrage lösen.

I

secondimage.setAnimation(fadeout); 

mit

secondimage.startAnimation(fadeout); 

Auf diese Weise ersetzt, war der Code der Lage, die onAnimationEnd Funktion zu erreichen.

0

Am einfachsten ist es, eine neue Instanz des Animationsobjekts für jede Ansicht, die animiert werden soll, zu erstellen/aufzublasen. Wie Sie es jetzt haben, versucht es, dasselbe Objekt wiederzuverwenden.

+0

Also grundsätzlich jedes Mal, wenn der Button clickMe gedrückt wird, innerhalb der rand if-else Blöcke ein neues Animationsobjekt erstellen? – Piyush

+0

Ja, oder erstellen Sie sie alle im Voraus und verwenden Sie sie wo nötig, stellen Sie sicher, dass sie jeweils nur einmal verwendet werden. –

+0

Ich bin mir nicht sicher, ob dies an der Animation oder dem onClick-Ereignis liegt. Dies liegt daran, dass der onClickListener nur einmal aufgerufen wird? – Piyush