内容简介:源码版本ResourceTranscoder是ResourceTranscoder的实现子类一种有5个:
源码版本 Glide 4.8.0
ResourceTranscoder
ResourceTranscoder是 Glide 内类型转换器的抽象接口,表示资源从一种类型转换为另一种类型。泛型 Z 表示转换前资源的原始类型,泛型 R 表示资源转换后的目标类型。
public interface ResourceTranscoder<Z, R> { // 子类实现此方法,根据既定规则和传入参数返回转换结果 @Nullable Resource<R> transcode(@NonNull Resource<Z> toTranscode, @NonNull Options options); }
ResourceTranscoder的实现子类一种有5个:
BitmapBytesTranscoder
转换 Bitmap 资源为字节数组
public class BitmapBytesTranscoder implements ResourceTranscoder<Bitmap, byte[]> { private final Bitmap.CompressFormat compressFormat; private final int quality; public BitmapBytesTranscoder() { // 默认转换为JPEG,压缩质量100,该质量相当于最轻量的压缩,而非不压缩 this(Bitmap.CompressFormat.JPEG, 100); } @SuppressWarnings("WeakerAccess") public BitmapBytesTranscoder(@NonNull Bitmap.CompressFormat compressFormat, int quality) { this.compressFormat = compressFormat; this.quality = quality; } @Nullable @Override public Resource<byte[]> transcode(@NonNull Resource<Bitmap> toTranscode, @NonNull Options options) { // 创建输出流 ByteArrayOutputStream os = new ByteArrayOutputStream(); // android.graphics.Bitmap#compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream) toTranscode.get().compress(compressFormat, quality, os); toTranscode.recycle(); return new BytesResource(os.toByteArray()); } }
BitmapDrawableTranscoder
转换 Bitmap 资源为 BitmapDrawable
public class BitmapDrawableTranscoder implements ResourceTranscoder<Bitmap, BitmapDrawable> { private final Resources resources; @SuppressWarnings("unused") public BitmapDrawableTranscoder(@NonNull Context context) { this(context.getResources()); } /** * @deprecated Use {@link #BitmapDrawableTranscoder(Resources)}, {@code bitmapPool} is unused. */ @Deprecated public BitmapDrawableTranscoder( @NonNull Resources resources, @SuppressWarnings("unused") BitmapPool bitmapPool) { this(resources); } public BitmapDrawableTranscoder(@NonNull Resources resources) { this.resources = Preconditions.checkNotNull(resources); } @Nullable @Override public Resource<BitmapDrawable> transcode(@NonNull Resource<Bitmap> toTranscode, @NonNull Options options) { return LazyBitmapDrawableResource.obtain(resources, toTranscode); } }
DrawableBytesTranscoder
转换 Drawable 资源为字节数组
public final class DrawableBytesTranscoder implements ResourceTranscoder<Drawable, byte[]> { private final BitmapPool bitmapPool; private final ResourceTranscoder<Bitmap, byte[]> bitmapBytesTranscoder; private final ResourceTranscoder<GifDrawable, byte[]> gifDrawableBytesTranscoder; public DrawableBytesTranscoder( @NonNull BitmapPool bitmapPool, @NonNull ResourceTranscoder<Bitmap, byte[]> bitmapBytesTranscoder, @NonNull ResourceTranscoder<GifDrawable, byte[]> gifDrawableBytesTranscoder) { this.bitmapPool = bitmapPool; this.bitmapBytesTranscoder = bitmapBytesTranscoder; this.gifDrawableBytesTranscoder = gifDrawableBytesTranscoder; } @Nullable @Override public Resource<byte[]> transcode(@NonNull Resource<Drawable> toTranscode, @NonNull Options options) { Drawable drawable = toTranscode.get(); if (drawable instanceof BitmapDrawable) { return bitmapBytesTranscoder.transcode( BitmapResource.obtain(((BitmapDrawable) drawable).getBitmap(), bitmapPool), options); } else if (drawable instanceof GifDrawable) { return gifDrawableBytesTranscoder.transcode(toGifDrawableResource(toTranscode), options); } return null; } @SuppressWarnings("unchecked") @NonNull private static Resource<GifDrawable> toGifDrawableResource(@NonNull Resource<Drawable> resource) { return (Resource<GifDrawable>) (Resource<?>) resource; } }
GifDrawableBytesTranscoder
把 com.bumptech.glide.load.resource.gif.GifDrawable 资源转换为字节数组
public class GifDrawableBytesTranscoder implements ResourceTranscoder<GifDrawable, byte[]> { @Nullable @Override public Resource<byte[]> transcode(@NonNull Resource<GifDrawable> toTranscode, @NonNull Options options) { GifDrawable gifData = toTranscode.get(); ByteBuffer byteBuffer = gifData.getBuffer(); return new BytesResource(ByteBufferUtil.toBytes(byteBuffer)); } }
UnitTranscoder
ResourceTranscoder的实现最简单,输入和输出类型完全相同
public class UnitTranscoder<Z> implements ResourceTranscoder<Z, Z> { // 本实现类的单例 private static final UnitTranscoder<?> UNIT_TRANSCODER = new UnitTranscoder<>(); @SuppressWarnings("unchecked") public static <Z> ResourceTranscoder<Z, Z> get() { return (ResourceTranscoder<Z, Z>) UNIT_TRANSCODER; } @Nullable @Override public Resource<Z> transcode(@NonNull Resource<Z> toTranscode, @NonNull Options options) { // 直接返回传入对象 return toTranscode; } }
以上所述就是小编给大家介绍的《Glide -- ResourceTranscoder》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ASP.NET 4高级程序设计(第4版)
Matthew MacDonald / 博思工作室 / 人民邮电出版社 / 2011-6 / 148.00元
《ASP.NET 4高级程序设计(第4版)》,本书是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。一起来看看 《ASP.NET 4高级程序设计(第4版)》 这本书的介绍吧!