public GifFrameManager(Context context, GifDecoder decoder, Handler mainHandler, Transformation<Bitmap> transformation) { this.context = context; this.decoder = decoder; this.mainHandler = mainHandler; this.transformation = transformation; calculator = new MemorySizeCalculator(context); frameLoader = new GifFrameModelLoader(); frameResourceDecoder = new GifFrameResourceDecoder(); if (!decoder.isTransparent()) { // For non transparent gifs, we can beat the performance of our gif decoder for each frame by decoding jpegs // from disk. cacheDecoder = new StreamBitmapDecoder(context); encoder = new BitmapEncoder(Bitmap.CompressFormat.JPEG, 70); } else { // For transparent gifs, we would have to encode as pngs which is actually slower than our gif decoder so we // avoid writing frames to the disk cache entirely. cacheDecoder = NullCacheDecoder.get(); encoder = SkipCache.get(); } }
/** * Allows the loaded resource to skip the disk cache. * * <p> * Note - this is not a guarantee. If a request is already pending for this resource and that request is not * also skipping the disk cache, the resource will be cached on disk. * </p> * * @param skip True to allow the resource to skip the disk cache. * @return This RequestBuilder. */ public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> skipDiskCache(boolean skip) { if (skip) { if (loadProvider != null) { preSkipEncoder = loadProvider.getEncoder(); } final SkipCache<ResourceType> skipCache = SkipCache.get(); return encoder(skipCache); } else { return encoder(preSkipEncoder); } }