2016-04-21 17 views
1

Ich möchte zwischen zwei Bildern kontinuierlich Schleife. Das erste Bild sollte durch das zweite Bild und das zweite Bild durch das erste Bild unendlich ersetzt werden.Schleife zwischen zwei Bildern

Der Code, den ich bisher habe, ist wie folgt:

imageHandler = new Handler(); 
    imageHandler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView); 
     } 
    }, 1000); 
    imageHandler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView); 
     } 
    }, 2000); 

Hier wird das Flip geschieht aber nur einmal. Wie programmiere ich es so, dass es unendlich oft wiederholt werden kann?

Antwort

3

Deklarieren zwei runnable:

Runnable goToImage2; 
Runnable goToImage1 = new Runnable() { 
    @Override 
    public void run() { 
    Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView); 
    handler.postDelayed(goToImage2, 2000); 
    } 
} 
goToImage2 = new Runnable() { 
    @Override 
    public void run() { 
    Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView); 
    handler.postDelayed(goToImage1, 2000); 
    } 
} 

Dann starten Sie einfach die erste:

handler.postDelayed(goToImage1, 0);

EDIT: Wenn Sie nur zwei Bilder benötigen, können Sie auch einfach eine boolean verwenden zu wissen, welche ein zu zeigen, und deshalb nur einen runnable verwenden:

boolean isShowingFirst = true;

Runnable changeImage = new Runnable() { 
    @Override 
    public void run() { 
    Picasso.with(TokenActivity.this).load(isShowingFirst ? R.drawable.camera_icon : R.drawable.app_icon).into(iconImageView); 
    isShowingFirst = !isShowingFirst; 
    handler.postDelayed(changeImage, 2000); 
    } 
} 

und starten Sie es mit:

handler.postDelayed(changeImage, 0); 
+0

Wird das erste 'runnable' in der Anweisung' handler.postDelayed (goToImage2, 2000) 'nicht' goToImage2' erkennen? '? Da gibt es keine Deklaration oder Definition? –

+0

Wenn das der Fall ist, sehen Sie einfach meine Bearbeitung, deklarieren Sie das 2. vor, aber implementieren Sie es danach. – NSimon

+0

Nur ein kleines Problem damit, da ich auf den zweiten runnable innerhalb des 'run' zugreife, muss es als final deklariert werden und wenn es als 'final' deklariert wird, erscheint der Fehler, der vielleicht nicht initialisiert wird. –

1

Mein Vorschlag, die ganze Sache mit einem einzigen Thread zu vereinfachen wäre.

new Thread(new Runnable(){ 

    public void run(){ 
     while(true){ 
      Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView); 

      this.sleep(2000); 

      Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView); 


      this.sleep(2000); 
     } 
    } 

}).start(); 

Nehmen Sie diese Antwort mit einem Körnchen Salz, wie es nicht genau sein kann, wie Sie es implementieren möchten.

Verwandte Themen