package com.bumptech.glide.request.target;
import com.bumptech.glide.util.Util;
/**
* A simple {@link com.bumptech.glide.request.target.Target} base class with default (usually noop)
* implementations of non essential methods that allows the caller to specify an exact width/height.
* Typically use cases look something like this:
* <pre>
* <code>
* Glide.load("http://somefakeurl.com/fakeImage.jpeg")
* .asBitmap()
* .withFitCenter()
* .into(new SimpleTarget<Bitmap>(250, 250) {
*
* {@literal @Override}
* public void onResourceReady(Bitmap resource, GlideAnimation<Bitmap> glideAnimation) {
* // Do something with bitmap here.
* }
*
* });
* }
* </code>
* </pre>
*
* @param <Z> The type of resource that this target will receive.
*/
public abstract class SimpleTarget<Z> extends BaseTarget<Z> {
private final int width;
private final int height;
/**
* Constructor for the target that uses {@link Target#SIZE_ORIGINAL} as the target width and
* height.
*/
public SimpleTarget() {
this(SIZE_ORIGINAL, SIZE_ORIGINAL);
}
/**
* Constructor for the target that takes the desired dimensions of the decoded and/or transformed
* resource.
*
* @param width The width in pixels of the desired resource.
* @param height The height in pixels of the desired resource.
*/
public SimpleTarget(int width, int height) {
this.width = width;
this.height = height;
}
/**
* Immediately calls the given callback with the sizes given in the constructor.
*
* @param cb {@inheritDoc}
*/
@Override
public final void getSize(SizeReadyCallback cb) {
if (!Util.isValidDimensions(width, height)) {
throw new IllegalArgumentException(
"Width and height must both be > 0 or Target#SIZE_ORIGINAL, but given" + " width: "
+ width + " and height: " + height + ", either provide dimensions in the constructor"
+ " or call override()");
}
cb.onSizeReady(width, height);
}
}