Je souhaite afficher un effet de fondu lors du chargement de l'image dans Imageview. J'utilise picasso pour mettre en cache l'image et l'afficher en mode d'affichage image. J'ai cherché beaucoup pour cela mais je n'ai trouvé aucune solution.
J'ai déjà utilisé auparavant et je sais que dans certaines versions, ils utilisaient la méthode .fade (int duration) pour atténuer l'image pendant le chargement, mais je ne pouvais plus trouver cette méthode.
Voici ce que je fais maintenant
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");
}
});
}
}
S'il vous plaît, aidez-moi, je suis coincé dans cette affaire depuis assez longtemps… .. Merci d'avance.
Citant la réponse de Jake Wharton ici :
Si l'image provient de n'importe où sauf la mémoire cache, le fondu devrait être appliqué automatiquement.
Si vous vérifiez la PicassoDrawable
class
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
est déjà appliqué aux images chargées à partir de n/w et non de mémoire/cache et FADE_DURATION = 200f; //ms
Pour forcer s'estomper, citant encore la réponse de jake wharton ici :
Vous pouvez spécifier noFade (), puis lire toujours une animation dans le fichier rappel de l'image chargée. Vous pouvez également compter sur le rappel appelé synchroniquement pour déterminer si une animation doit être jouée.
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);
Vous pouvez simplement faire
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() {
}
});
Je fais ça:
Picasso.get().load(url).fit().noFade().centerInside().into(imageView, new Callback() {
@Override
public void onSuccess() {
imageView.setAlpha(0f);
imageView.animate().setDuration(200).alpha(1f).start();
}
@Override
public void onError(Exception e) {
}
});