2016-04-21 3 views
1

Я хочу непрерывно перемещаться между двумя изображениями. Первое изображение должно быть заменено вторым изображением, а второе - бесконечным.Петля между двумя изображениями

код, который я до сих пор выглядит следующим образом:

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); 

Здесь оборотная происходит, но только один раз. Как мне запрограммировать его так, чтобы он мог бесконечно повторять?

ответ

3

Объявите два исполняемым:

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); 
    } 
} 

Тогда просто запустить первый один:

handler.postDelayed(goToImage1, 0);

EDIT: Если вам нужно только два изображения, вы можете просто использовать логическое значение, чтобы знать, какие один для отображения и, следовательно, использовать только одну управляемую:

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); 
    } 
} 

И запустить его:

handler.postDelayed(changeImage, 0); 
+0

Не будет ли первый «runnable» не распознать 'goToImage2' в выражении' handler.postDelayed (goToImage2, 2000); '? Поскольку нет декларации или определения? –

+0

Если это так, просто см. Мое редактирование, объявите 2-е место раньше, но реализуйте его после. – NSimon

+0

Только небольшая проблема с этим, так как я обращаюсь ко второму запуску внутри 'run', он должен быть объявлен окончательным, и если он объявлен' final', сообщение об ошибке может не инициализироваться, появляется. –

1

Мое предложение было бы упростить все это с одной нитью.

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(); 

Ответьте на этот вопрос с солью, поскольку это может быть не совсем так, как вы хотите ее реализовать.

Смежные вопросы