Issue 1:
Why there's no default crossFade animation for fallback and error drawables? I want to toggle image (null <-> not null) and animate between image and fallback (or error if it occurs). Animation only shows in fallback -> image direction but not the other way around.

I'm loading my images like this:

private ImageView vPhoto;

private void setPhoto(File photoFile)
{
Glide.with(this)
.load(photoFile)
.signature(new MediaStoreSignature("", photoFile != null ? photoFile.lastModified() : 0L, getResources().getConfiguration().orientation))
.centerCrop()
.error(R.drawable.ic_broken_image)
.fallback(R.drawable.ic_photo)
.into(vPhoto);
}

It doesn't event work if I explicitly add crossFade() method.

Issue 2:
I would like to do two functions but hard to found source support on it with Glide.

Since I have a dynamic size list view, I don't know the exactly height of it.

I need to make a background ImageView behind it, and the background is a network image.

****I have wait all of the listview item generate finished an get the exactly Width and Height.

if( bitmap.height < imageView.height ){
repeat bitmap
}else if( bitmap.height > imageView.height){
chop bottom
}

Image should align top, fill width, chop the bottom.

If there are too many items and the background is not long enough, it should repeat the image

through some method like this:

BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), bitmap);
bitmapDrawable.setTileModeXY(Shader.TileMode.CLAMP, Shader.TileMode.REPEAT);
bitmap = bitmapDrawable.getBitmap();

Thank you.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/llBottom"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<ImageView
android:id="@+id/imgBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/llPoPit"
android:layout_alignLeft="@+id/llPoPit"
android:layout_alignRight="@+id/llPoPit"
android:layout_alignTop="@+id/llPoPit"
android:adjustViewBounds="true" />

<LinearLayout
android:id="@+id/llItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<android.support.v7.widget.RecyclerView
android:id="@+id/lstOnSalesItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:nestedScrollingEnabled="false"
android:paddingBottom="@dimen/margin_small" />

<ImageView
android:id="@+id/img2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:background="@null"
android:scaleType="fitCenter" />
</LinearLayout>
</RelativeLayout>

RequestOptions requestOptions = new RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.dontAnimate();

final int dW = Long.valueOf(Math.round((double)llPoPit.getMeasuredWidth())).intValue();
final int dH = Long.valueOf(Math.round((double)llPoPit.getMeasuredHeight())).intValue();
ChopOrRepeatTransformation transformation = new ChopOrRepeatTransformation(
act, dW, dH, ChopOrRepeatTransformation.CropType.TOP
); // this is Copy from Chop Transformation
requestOptions.transform(transformation);

Glide.with(act).asBitmap().load(bgUrl)
.apply(requestOptions)
.into(imgBackground);