android imageview transitiondrawable

android - ¿Hay alguna alternativa CircleImageView con soporte de TransitionAnimation?



transitiondrawable (1)

Tengo ImageView. Después de cargar el mapa de bits en onPostExecute llamo a setImageDrawable para llenar imageView (uso CircleImageView) con imagen. Pero TransitionDrawable muestra solo la primera imagen y no se ejecuta ninguna transacción. ¿Cómo hago que esto funcione? Gracias por adelantado.

private void setImageDrawable(ImageView imageView, Bitmap bitmap) { if (mFadeInBitmap) { BitmapDrawable drawable = null, placeholder = null; if (bitmap != null) { drawable = new BitmapDrawable(mResources, bitmap); placeholder = new BitmapDrawable(mResources, mPlaceHolderBitmap); } final TransitionDrawable td = new TransitionDrawable(new Drawable[] { placeholder, drawable, }); imageView.setImageDrawable(td); td.startTransition(200); } else { imageView.setImageBitmap(bitmap); } }

ACTUALIZACIÓN: He encontrado la solución por la que no funciona para mí en la documentación de CircleImageView: "El uso de TransitionDrawable con CircleImageView no funciona correctamente y genera imágenes en mal estado" ( https://github.com/hdodenhof/CircleImageView). )

Entonces, ¿alguien puede sugerirme la forma en que puedo obtener la imagen del círculo con fade en la animación funcionando correctamente?

ACTUALIZACIÓN 2: La solución que he encontrado para obtener una transición fluida entre dos imágenes circulares es desvanecer la primera y luego desvanecer la segunda con Animación y publicar demorada. Aquí está el ejemplo del código.

fade_out.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true"> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="100" android:interpolator="@android:anim/accelerate_interpolator" /> </set>

fade_in.xml casi idéntico excepto que cambias de Alfa a Alfa por lugares. Después de eso, aplica estas animaciones a la vista de imagen de tu círculo, así:

Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.fade_out); imageView.startAnimation(anim); final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { imageView.setImageBitmap(value);//changing to different image ,here you will set image that you have loaded Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.fade_in); imageView.startAnimation(anim); } }, 100);

Espero que sea útil.


He intentado el siguiente código y puedo decir que funciona y la transición es más o menos visible:

private void setImageDrawable(ImageView imageView) { Bitmap bitmap1 = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); Bitmap bitmap2 = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); new Canvas(bitmap1).drawRect(0, 0, 100, 100, mWhitePaint); new Canvas(bitmap2).drawRect(0, 0, 100, 100, mBlackPaint); BitmapDrawable drawable1 = new BitmapDrawable(getResources(), bitmap1); BitmapDrawable drawable2 = new BitmapDrawable(getResources(), bitmap2); TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[] {drawable1, drawable2}); imageView.setImageDrawable(transitionDrawable); transitionDrawable.startTransition(3000); }

Compruebe que su bitmap no sea null y que sea diferente de mPlaceHolderBitmap (que tampoco debería ser null ). También intente establecer la duración de transición en 3 segundos, por ejemplo, porque tal vez 200 ms es demasiado rápido para ver la transición en sí.