studio perfil manipulacion implementar imagenes imagen galeria ejemplo desde codigo cargar archivo android fade picasso image-loading

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