2013-07-11 13 views
9

Ho un'attività in cui cambio periodicamente il ImageView, per questo ho scritto la riga di codice riportata di seguito.Come eseguire una transizione graduale da un'immagine all'altra

imageview.setImageUri(resId); 

sto aumentando l'ID di risorsa .E funziona bene ma c'è improvviso passaggio da un'immagine all'altra. Non voglio quello, voglio la transizione graduale della vista dell'immagine su un'altra immagine. Come lo posso fare?

risposta

15

Prova questa

ImageView demoImage = (ImageView) findViewById(R.id.DemoImage); 
int imagesToShow[] = { R.drawable.image1, R.drawable.image2,R.drawable.image3 }; 

animate(demoImage, imagesToShow, 0,false); 



    private void animate(final ImageView imageView, final int images[], final int imageIndex, final boolean forever) { 

    //imageView <-- The View which displays the images 
    //images[] <-- Holds R references to the images to display 
    //imageIndex <-- index of the first image to show in images[] 
    //forever <-- If equals true then after the last image it starts all over again with the first image resulting in an infinite loop. You have been warned. 

    int fadeInDuration = 500; // Configure time values here 
    int timeBetween = 3000; 
    int fadeOutDuration = 1000; 

    imageView.setVisibility(View.INVISIBLE); //Visible or invisible by default - this will apply when the animation ends 
    imageView.setImageResource(images[imageIndex]); 

    Animation fadeIn = new AlphaAnimation(0, 1); 
    fadeIn.setInterpolator(new DecelerateInterpolator()); // add this 
    fadeIn.setDuration(fadeInDuration); 

    Animation fadeOut = new AlphaAnimation(1, 0); 
    fadeOut.setInterpolator(new AccelerateInterpolator()); // and this 
    fadeOut.setStartOffset(fadeInDuration + timeBetween); 
    fadeOut.setDuration(fadeOutDuration); 

    AnimationSet animation = new AnimationSet(false); // change to false 
    animation.addAnimation(fadeIn); 
    animation.addAnimation(fadeOut); 
    animation.setRepeatCount(1); 
    imageView.setAnimation(animation); 

    animation.setAnimationListener(new AnimationListener() { 
     public void onAnimationEnd(Animation animation) { 
      if (images.length - 1 > imageIndex) { 
       animate(imageView, images, imageIndex + 1,forever); //Calls itself until it gets to the end of the array 
      } 
      else { 
       if (forever == true){ 
       animate(imageView, images, 0,forever); //Calls itself to start the animation all over again in a loop if forever = true 
       } 
      } 
     } 
     public void onAnimationRepeat(Animation animation) { 
      // TODO Auto-generated method stub 
     } 
     public void onAnimationStart(Animation animation) { 
      // TODO Auto-generated method stub 
     } 
    }); 
} 
+0

grazie per una rapida risposta. Ho votato. Sto lavorando su Android 2.3, dove come animazione è stata aggiunta in Android 3 –

+0

Non so se arrivo troppo tardi, ma stavo cercando una risposta come questa ed è stato fantastico. Ad ogni modo, ho scoperto un altro modo per ricominciare l'effetto. Si può fare 'animate (imageView, images, imageIndex% images.length + 1, per sempre)' così gli indici saranno sempre all'interno dei limiti. –

1

Per una transizione senza problemi è necessario utilizzare animazioni in Android, iniziare leggendo il seguente link: http://www.vogella.com/articles/AndroidAnimation/article.html

Ci sono molte domande simili su StackOverflow su animazioni e molti tutorial sono disponibili in rete su questo argomento. Una semplice ricerca su google ti porterà tonnellate di risultati

+0

sto lavorando su Android 2.3, dove l'animazione è stata aggiunta in Android 3 –

2

Prova l'animazione alfa. Per prima cosa svanisci la visualizzazione di immagini, al termine dell'animazione, modifica la risorsa e quindi dissolvenza nella visualizzazione di immagini.

+1

sto lavorando su Android 2.3, dove l'animazione è stata aggiunta in Android 3 –

+0

animazione Alpha è disponibile da API livello 1. http://developer.android.com/reference/android/view/animation/AlphaAnimation.html –

Problemi correlati