public abstract class BitmapTransformation extends Object implements Transformation<Bitmap>
Transformation
for transforming
Bitmap
s that abstracts away dealing with
Resource
objects for subclasses.
Use cases will look something like this:
public class FillSpace extends BaseBitmapTransformation {
private static final String ID = "com.bumptech.glide.transformations.FillSpace";
private static final String ID_BYTES = ID.getBytes(STRING_CHARSET_NAME);
@Override
public Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
if (toTransform.getWidth() == outWidth && toTransform.getHeight() == outHeight) {
return toTransform;
}
return Bitmap.createScaledBitmap(toTransform, outWidth, outHeight, true);
}
@Override
public void equals(Object o) {
return o instanceof FillSpace;
}
@Override
public int hashCode() {
return ID.hashCode();
}
@Override
public void updateDiskCacheKey(MessageDigest messageDigest)
throws UnsupportedEncodingException {
messageDigest.update(ID_BYTES);
}
}
CHARSET, STRING_CHARSET_NAME
Constructor and Description |
---|
BitmapTransformation() |
BitmapTransformation(BitmapPool bitmapPool)
Deprecated.
|
BitmapTransformation(Context context)
Deprecated.
|
Modifier and Type | Method and Description |
---|---|
protected abstract Bitmap |
transform(BitmapPool pool,
Bitmap toTransform,
int outWidth,
int outHeight)
Transforms the given
Bitmap based on the given dimensions and returns
the transformed result. |
Resource<Bitmap> |
transform(Context context,
Resource<Bitmap> resource,
int outWidth,
int outHeight)
Transforms the given resource and returns the transformed resource.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
equals, hashCode
updateDiskCacheKey
public BitmapTransformation()
@Deprecated public BitmapTransformation(Context context)
@Deprecated public BitmapTransformation(BitmapPool bitmapPool)
public final Resource<Bitmap> transform(Context context, Resource<Bitmap> resource, int outWidth, int outHeight)
Transformation
If the original resource object is not returned, the original resource will be recycled and it's internal resources may be reused. This means it is not safe to rely on the original resource or any internal state of the original resource in any new resource that is created. Usually this shouldn't occur, but if absolutely necessary either the original resource object can be returned with modified internal state, or the data in the original resource can be copied into the transformed resource.
If a Transformation is updated, Transformation.equals(Object)
, Transformation.hashCode()
, and
Key.updateDiskCacheKey(java.security.MessageDigest)
should all change. If you're using a
simple String key an easy way to do this is to append a version number to your key. Failing to
do so will mean users may see images loaded from cache that had the old version of the
Transformation applied. Changing the return values of those methods will ensure that the cache
key has changed and therefore that any cached resources will be re-generated using the updated
Transformation.
During development you may need to either using DiskCacheStrategy.NONE
or make sure Key.updateDiskCacheKey(java.security.MessageDigest)
changes each time you make a change to the
Transformation. Otherwise the resource you request may be loaded from disk cache and your
Transformation may not be called.
transform
in interface Transformation<Bitmap>
context
- The Application contextresource
- The resource to transform.outWidth
- The width of the view or target the resource will be displayed in, or Target.SIZE_ORIGINAL
to indicate the
original resource width.outHeight
- The height of the view or target the resource will be displayed in, or Target.SIZE_ORIGINAL
to indicate the
original resource height.protected abstract Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight)
Bitmap
based on the given dimensions and returns
the transformed result.
The provided Bitmap, toTransform, should not be recycled or returned to the pool. Glide will automatically recycle and/or reuse toTransform if the transformation returns a different Bitmap. Similarly implementations should never recycle or return Bitmaps that are returned as the result of this method. Recycling or returning the provided and/or the returned Bitmap to the pool will lead to a variety of runtime exceptions and drawing errors. See #408 for an example. If the implementation obtains and discards intermediate Bitmaps, they may safely be returned to the BitmapPool and/or recycled.
outWidth and outHeight will never be
Target.SIZE_ORIGINAL
,
this class converts them to be the size of the Bitmap we're going to transform before calling
this method.
pool
- A BitmapPool
that can
be used to obtain and return intermediate Bitmap
s used in this
transformation. For every Bitmap
obtained from the
pool during this transformation, a Bitmap
must also
be returned.toTransform
- The Bitmap
to transform.outWidth
- The ideal width of the transformed bitmap (the transformed width does not
need to match exactly).outHeight
- The ideal height of the transformed bitmap (the transformed height does not
need to match exactly).