2015-12-28 16 views
15

Desidero mostrare un effetto di dissolvenza quando l'immagine viene caricata su Imageview. Sto usando Picasso per memorizzare l'immagine e visualizzarla nella vista dell'immagine. Ho cercato molto per questo ma non ho trovato alcuna soluzione.Dissolvenza durante l'animazione durante il caricamento dell'immagine Uso di Picasso

Ho usato in precedenza e so che in alcune versioni avevano il metodo .fade (int Duration) per dissolvere l'immagine durante il caricamento ma non riuscivo più a trovare questo metodo.

Ecco quello che sto facendo ora

Picasso.with(context) 
       .load(viewHolder.data.imageList.get(0).url) 
       .networkPolicy(NetworkPolicy.OFFLINE) 
       .placeholder(R.drawable.a_place_holder_list_view) 
       .error(R.drawable.a_place_holder_list_view) 
       .into(viewHolder.ivUser, context.loadImage(viewHolder.ivUser, viewHolder.data.imageList.get(0).url)); 


public Callback loadImage(RoundedImageView ivUser, String url) { 
    return new callback(ivUser, url); 
} 

public class callback implements Callback { 

    RoundedImageView imageView; 
    String url; 

    public callback(RoundedImageView imageView, String url) { 
     this.imageView = imageView; 
     this.url = url; 
    } 

    @Override 
    public void onSuccess() { 

    } 

    @Override 
    public void onError() { 
     Picasso.with(BaseActivity.this) 
       .load(url) 
       .placeholder(R.drawable.a_place_holder_list_view) 
       .error(R.drawable.a_place_holder_list_view) 
       .into(imageView, new Callback() { 
        @Override 
        public void onSuccess() { 

        } 

        @Override 
        public void onError() { 
         Log.v("Picasso", "Could not fetch image"); 
        } 
       }); 
    } 
} 

Please help me mi è stato bloccato in questo per molto tempo. Grazie in anticipo.

+0

https://github.com/square/picasso/issues/743, vedere JakeWharton risposta in fondo. utilizzare una richiamata. – HourGlass

risposta

12

Citando la risposta di Jake Wharton here:

Se l'immagine proviene da ovunque tranne la memoria cache della dissolvenza deve essere applicato automaticamente.

Se si seleziona la PicassoDrawable classe

boolean fade = loadedFrom != MEMORY && !noFade; 
if (fade) { 
    this.placeholder = placeholder; 
    animating = true; 
    startTimeMillis = SystemClock.uptimeMillis(); 
} 
. 
. 
. 
@Override public void draw(Canvas canvas) { 
if (!animating) { 
    super.draw(canvas); 
} else { 
. 
. 
. 

fade effect è già applicato per le immagini caricate da n/w e non la memoria/cache e FADE_DURATION = 200f; //ms

Per forzare dissolvenza, citando ancora Jake Wharton answer here:

È possibile specificare noFade() e quindi riprodurre sempre un'animazione nel callback caricato con l'immagine . È anche possibile fare affidamento sul callback chiamato in modo sincrono per determinare se è necessario riprodurre un'animazione.

final AtomicBoolean playAnimation = new AtomicBoolean(true); 
Picasso.with(context).load(..).into(imageView, new Callback() { 
    @Override public void onLoad() { 
    if (playAnimation.get()) { 
     //play fade 
     Animation fadeOut = new AlphaAnimation(0, 1); 
     fadeOut.setInterpolator(new AccelerateInterpolator()); 
     fadeOut.setDuration(1000); 
     imageView.startAnimation(fadeOut); 

     Animation fadeOutPlaceholder = new AlphaAnimation(1, 0); 
     fadeOutPlaceholder.setInterpolator(new AccelerateInterpolator()); 
     fadeOutPlaceholder.setDuration(1000); 
     placeHolderImageView.startAnimation(fadeOutPlaceholder); 
    } 
    } 
    //.. 
}); 
playAnimation.set(false); 
+0

Puoi aiutarmi con il mio codice sono nuovo per android – Android

+0

l'effetto di dissolvenza è già applicato alle immagini caricate da n/w. La durata della dissolvenza è 200ms. In caso contrario, come indicato da @Hourglass, specificare noFade() e quindi riprodurre un'animazione nel callback caricato dell'immagine. – random

+0

Come posso fare questo – Android

0

si può semplicemente fare

Picasso.with(context).load(url).fetch(new Callback(){ 
      @Override 
      public void onSuccess() { 
       imageView.setAlpha(0f); 
       Picasso.with(context).load(url).into(imageView); 
       imageView.animate().setDuration(300).alpha(1f).start(); 
      } 

      @Override 
      public void onError() { 

      } 
     }); 
Problemi correlati