2012-09-26 19 views
6

Ich habe einen ViewFlipper eingestellt, um alle 5 Sekunden automatisch zu spiegeln. Weglassen einige der Details, sieht es so aus und funktioniert gut:Wie man Android ViewFlipper vom Schleifen stoppt?

ViewFlipper flipper = (ViewFlipper) findViewById(R.id.myflipperid); 

flipper.setFlipInterval(5000);        
flipper.setInAnimation(inFromRightAnimation()); 
flipper.setOutAnimation(outToLeftAnimation()); 

flipper.startFlipping(); 

Ich habe jedoch einen Fall, wo ich das Auto-Flipping will in der letzten Ansicht zu stoppen, anstatt um Looping wieder von vorn anfangen . Es scheint nicht, dass ViewFlipper oder eine der Klassen, von denen er erbt, eine Schleifenkontrollmethode haben.

Wie kann ich ViewFlipper stoppen, um durch seine untergeordneten Ansichten zu laufen, wenn es die letzte trifft?

Hinweis: die Antwort gegeben here trifft nicht auf meinen Fall zu, da ich den ViewFlipper am Ende seiner Liste abfangen muss, d. H. Ohne von Benutzereingaben abhängig zu sein. Vielen Dank.

Antwort

6

Ich habe das nicht selbst versucht, aber ich hoffe, das wird helfen.

Versuchen Sie zuerst, die Flip-Ereignisse Ihres Viewflippers zu hören. Da Sie eine Animation verwenden. Sie können die hier veröffentlichte Lösung verwenden: https://stackoverflow.com/a/3813179/1594522

Dann onAnimationEnd(), können Sie überprüfen, ob der Viewflipper in seiner letzten untergeordneten Ansicht ist. Wenn es sich bereits in der letzten untergeordneten Ansicht befindet, rufen Sie flipper.stopFlipping() auf.

Hoffe, dass hilft! :)

+1

Ja, genau das habe ich gestern gemacht. Du hast mich mit einer Antwort geschlagen, also gebe ich dir das Häkchen! Meine aktuelle Lösung finden Sie unten. – gcl1

0

einfach die Größe der Liste, und dann in dem, wenn die Bedingung, sagt

flipper.stopFlipping() 

Hoffen, dass es so funktioniert.

8

Hier ist die Lösung, die ich verwendet habe. Wie schon here, besteht der Trick darin, auf das Ende des Animationsereignisses zu warten und dann zu überprüfen, ob sich der Flipper in der letzten Ansicht befindet.

flipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() { 

    public void onAnimationStart(Animation animation) {} 
    public void onAnimationRepeat(Animation animation) {} 
    public void onAnimationEnd(Animation animation) { 

     int displayedChild = flipper.getDisplayedChild(); 
     int childCount = flipper.getChildCount(); 

     if (displayedChild == childCount - 1) { 
      flipper.stopFlipping(); 
     } 
    } 
}); 

Vielen Dank für Ihre Antworten.

+0

Was ist "flipperWall" in Ihrem Beispiel? –

+0

Entschuldigung, ich habe die Erklärung weggelassen. In diesem Beispiel ist flipperWall nur ein View-Flipper, wie dieser: ViewFlipper flipperWall ;. Sie müssen es außerdem mithilfe von findViewById() oder programmgesteuert aus einer XML-Datei initialisieren. Viel Glück! – gcl1

+0

Ich habe die Antwort bearbeitet. Sehen Sie, ob es jetzt mehr Sinn macht. –