I have got this code to crossfade the background of an ImageView:
private void setWithCrossfade(Bitmap bitmap) {
//create drawable vector
Drawable backgrounds[] = new Drawable[2];
//getting first image
backgrounds[0] = mImageView.getDrawable();
backgrounds[1] = new BitmapDrawable(mImageView.getResources(), bitmap);
TransitionDrawable transitionDrawable = new TransitionDrawable(backgrounds);
transitionDrawable.setCrossFadeEnabled(true);
mImageView.setAdjustViewBounds(false);
mImageView.setImageDrawable(transitionDrawable);
//it is needed to reset scale type
mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
//start crossfading
transitionDrawable.startTransition(250);
}
The ImageView scaleType is set to centerCrop in the XML layout. However, when the crossfade finishes, the new bitmap is set to fitXY. In other thread they say it can be solved by resetting the scaleType, but it is not working either. Resizing the bitmap is not a proper solution in terms of memory. Is there any workaround to implement this? Thank you very much.
P.S.: Please, do not suggest crossfading 2 ImageViews, or using a ViewSwitcher thanks.
I had the same problem. The problem is that a TransitionDrawable needs two drawables of the same size. If it is not the same size it stretches to the size of the first Image. Picasso already handles this. So I took the PicassoDrawable from Picasso and first set the placeholder and then the bitmap.
PicassoDrawable.setPlaceholder(imageView, placeholderDrawable);
PicassoDrawable.setBitmap(imageView, context, bitmap);
You may need to set the class and those methods to public. Also I removed some methods only relevant for Picasso. Now it should fade correctly with different image sizes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With