T
- The type of the resource being transformed.public interface Transformation<T> extends Key
equals(Object)
and hashCode()
} to identify the transformation in the memory
cache and Key.updateDiskCacheKey(java.security.MessageDigest)
} to identify the
transformation in disk caches.
Using the fully qualified class name (not Class.getName()
to avoid proguard
obfuscation) is an easy way to implement
Key.updateDiskCacheKey(java.security.MessageDigest)
} correctly.
Implementations must implement equals(Object)
and hashCode()
.
CHARSET, STRING_CHARSET_NAME
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object o)
For caching to work correctly, implementations must implement this method and
hashCode() . |
int |
hashCode()
For caching to work correctly, implementations must implement this method and
equals(Object) . |
Resource<T> |
transform(Context context,
Resource<T> resource,
int outWidth,
int outHeight)
Transforms the given resource and returns the transformed resource.
|
updateDiskCacheKey
Resource<T> transform(Context context, Resource<T> resource, int outWidth, int outHeight)
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, equals(Object)
, 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.
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.boolean equals(Object o)
hashCode()
.int hashCode()
equals(Object)
.