perfil - manipulacion de imagenes en android
Fade en la animaciĆ³n mientras se carga la imagen con Picasso (3)
Quiero mostrar un efecto de atenuación cuando la imagen se está cargando en Imageview. Estoy usando picasso para almacenar en caché la imagen y mostrarla en vista de imagen. He buscado mucho para esto, pero no pude encontrar ninguna solución.
He utilizado anteriormente y sé que en alguna versión tenían el método .fade (int Duration) para desvanecer la imagen mientras se estaba cargando, pero ya no pude encontrar este método.
Esto es lo que estoy haciendo ahora
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");
}
});
}
}
Por favor, ayúdame, he estado atrapado en esto durante bastante tiempo. Gracias por adelantado.
Citando la respuesta de Jake Wharton github.com/square/picasso/issues/743 :
Si la imagen proviene de cualquier lugar, excepto la memoria caché, el fundido debería aplicarse automáticamente.
Si PicassoDrawable
clase PicassoDrawable
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
ya se aplica a las imágenes cargadas desde n / w y no a memory / cache y FADE_DURATION = 200f; //ms
FADE_DURATION = 200f; //ms
Para forzar el desvanecimiento, nuevamente citando la respuesta de Jake Wharton github.com/square/picasso/issues/743 :
Puede especificar noFade () y luego reproducir siempre una animación en la devolución de llamada de la imagen cargada. También puede confiar en que la devolución de llamada se realice de forma sincrónica para determinar si es necesario reproducir una animación.
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);
Hago esto:
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) {
}
});
Simplemente puedes hacer
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() {
}
});