package com.bumptech.glide.request.target; import android.graphics.drawable.Drawable; import android.support.annotation.Nullable; import android.view.ViewGroup; import android.widget.ImageView; /** * Avoids extra calls to {@link android.view.View#requestLayout} when loading more than once * image into an {@link android.widget.ImageView} with fixed dimensions. * * <p>Typically it makes sense * to use this class when loading multiple images with the {@link * com.bumptech.glide.RequestBuilder#thumbnail(com.bumptech.glide.RequestBuilder)} API into views in * a scrolling list like ListView, GridView, or RecyclerView. * * <p>{@link FixedSizeDrawable} may cause skewing or other undesirable behavior depending on * your images, views, and scaling. If this occurs, consider {@link DrawableImageViewTarget} or * {@link BitmapImageViewTarget} as alternatives. * * @param <T> The type of resource that will be displayed in the ImageView. */ public abstract class ThumbnailImageViewTarget<T> extends ImageViewTarget<T> { public ThumbnailImageViewTarget(ImageView view) { super(view); } @Override protected void setResource(@Nullable T resource) { ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); Drawable result = getDrawable(resource); if (layoutParams != null && layoutParams.width > 0 && layoutParams.height > 0) { result = new FixedSizeDrawable(result, layoutParams.width, layoutParams.height); } view.setImageDrawable(result); } protected abstract Drawable getDrawable(T resource); }