Java 类com.bumptech.glide.load.resource.gif.GifDrawable 实例源码

项目:GitHub    文件:RequestOptions.java   
private RequestOptions transform(
    @NonNull Transformation<Bitmap> transformation, boolean isRequired) {
  if (isAutoCloneEnabled) {
    return clone().transform(transformation, isRequired);
  }

  DrawableTransformation drawableTransformation =
      new DrawableTransformation(transformation, isRequired);
  transform(Bitmap.class, transformation, isRequired);
  transform(Drawable.class, drawableTransformation, isRequired);
  // TODO: remove BitmapDrawable decoder and this transformation.
  // Registering as BitmapDrawable is simply an optimization to avoid some iteration and
  // isAssignableFrom checks when obtaining the transformation later on. It can be removed without
  // affecting the functionality.
  transform(BitmapDrawable.class, drawableTransformation.asBitmapDrawable(), isRequired);
  transform(GifDrawable.class, new GifDrawableTransformation(transformation), isRequired);
  return selfOrThrowIfLocked();
}
项目:Protein    文件:DribbbleTarget.java   
@Override
public void onResourceReady(Drawable resource, @Nullable Transition<? super Drawable> transition) {
    super.onResourceReady(resource, transition);

    BadgedFourThreeImageView badgedImageView = (BadgedFourThreeImageView) getView();
    if (resource instanceof GifDrawable) {
        Bitmap image = ((GifDrawable) resource).getFirstFrame();
        if (image != null) {
            // look at the corner to determine the gif badge color
            int cornerSize = (int) (56 * getView().getContext().getResources().getDisplayMetrics
                    ().scaledDensity);
            Bitmap corner = Bitmap.createBitmap(image,
                    image.getWidth() - cornerSize,
                    image.getHeight() - cornerSize,
                    cornerSize, cornerSize);
            boolean isDark = ColorUtils.isDark(corner);
            corner.recycle();
            badgedImageView.setBadgeColor(ContextCompat.getColor(getView().getContext(),
                    isDark ? R.color.gif_badge_dark_image : R.color.gif_badge_light_image));
        } else {
            badgedImageView.setBadgeColor(ContextCompat.getColor(getView().getContext(),
                    R.color.gif_badge_light_image));
        }
    }
}
项目:PSNine    文件:ImageViewActivity.java   
@Override
public void getData() {
    swipeRefreshLayout.setRefreshing(true);
    if (url.contains("gif") && !url.contains("large")) {
        url = Parse.parseImageUrl(url, 0);
    }
    list.clear();
    list.add(getString(R.string.save));
    if (!url.contains("large")) {
        list.add(getString(R.string.view_original_image));
    }
    alertDialog = new AlertDialog.Builder(this)
            .setTitle(R.string.option)
            .setItems(list.toArray(new String[list.size()]), this).create();
    LogUtils.d("Load image: " + url);
    if (url.contains("gif")) {
        Glide.with(this).asGif().load(url).into(new ImageViewTarget<GifDrawable>());
    } else {
        Glide.with(this).load(url).into(new ImageViewTarget<>());
    }
}
项目:Derpibooru    文件:ImageShare.java   
@Nullable
private Intent getShareIntentForImage(String sharingText) {
    File cachedImage = null;
    if (mImageResource instanceof GlideBitmapDrawable) {
        cachedImage = getCachedBitmap(((GlideBitmapDrawable) mImageResource).getBitmap());
    } else if (mImageResource instanceof GifDrawable) {
        cachedImage = getCachedGif((GifDrawable) mImageResource);
    }
    if (cachedImage != null) {
        Uri sharedUri = StreamProvider.getUriForFile("derpibooru.derpy.ui.ImageActivity", cachedImage);
        if (sharedUri != null) {
            return new Intent()
                    .setAction(Intent.ACTION_SEND)
                    .putExtra(Intent.EXTRA_SUBJECT, sharingText)
                    .putExtra(Intent.EXTRA_STREAM, sharedUri)
                    .setDataAndType(sharedUri, mContext.getContentResolver().getType(sharedUri))
                    .setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }
    }
    return null;
}
项目:Derpibooru    文件:ImageShare.java   
@Nullable
private File getCachedGif(GifDrawable gifDrawable) {
    try {
        File cacheDir = getImageCacheDir();
        if (cacheDir == null) {
            throw new IOException("cache directory does not exist.");
        }
        if (gifDrawable.getData().length >= GIF_FILE_SIZE_LIMIT_BYTES) {
            return getCachedBitmap(gifDrawable.getFirstFrame());
        } else {
            FileOutputStream stream = new FileOutputStream(cacheDir + SLASH_TEMP_GIF_FILE_NAME);
            stream.write(gifDrawable.getData());
            stream.close();
            return new File(cacheDir + SLASH_TEMP_GIF_FILE_NAME);
        }
    } catch (IOException e) {
        Log.e("ImageShare", "getCachedGif", e);
    }
    return null;
}
项目:GlidePalette    文件:GlidePalette.java   
@Override public boolean onResourceReady(TranscodeType resource, Object model, Target<TranscodeType> target, DataSource dataSource, boolean isFirstResource) {
    boolean callbackResult = this.callback != null && this.callback.onResourceReady(resource, model, target, dataSource, isFirstResource);

    Bitmap b = null;
    if (resource instanceof BitmapDrawable) {
        b = ((BitmapDrawable) resource).getBitmap();
    } else if (resource instanceof GifDrawable) {
        b = ((GifDrawable) resource).getFirstFrame();
    } else if (target instanceof BitmapHolder) {
        b = ((BitmapHolder) target).getBitmap();
    }

    if (b != null) {
        start(b);
    }

    return callbackResult;
}
项目:GitHub    文件:ReEncodingGifResourceEncoder.java   
@Override
public boolean encode(Resource<GifDrawable> resource, File file, Options options) {
  GifDrawable drawable = resource.get();
  Transformation<Bitmap> transformation = drawable.getFrameTransformation();
  boolean isTransformed = !(transformation instanceof UnitTransformation);
  if (isTransformed && options.get(ENCODE_TRANSFORMATION)) {
    return encodeTransformedToFile(drawable, file);
  } else {
    return writeDataDirect(drawable.getBuffer(), file);
  }
}
项目:GitHub    文件:ReEncodingGifResourceEncoder.java   
private boolean encodeTransformedToStream(GifDrawable drawable, OutputStream os) {
  Transformation<Bitmap> transformation = drawable.getFrameTransformation();
  GifDecoder decoder = decodeHeaders(drawable.getBuffer());
  AnimatedGifEncoder encoder = factory.buildEncoder();
  if (!encoder.start(os)) {
    return false;
  }

  for (int i = 0; i < decoder.getFrameCount(); i++) {
    Bitmap currentFrame = decoder.getNextFrame();
    Resource<Bitmap> transformedResource =
        getTransformedFrame(currentFrame, transformation, drawable);
    try {
      if (!encoder.addFrame(transformedResource.get())) {
        return false;
      }
      int currentFrameIndex = decoder.getCurrentFrameIndex();
      int delay = decoder.getDelay(currentFrameIndex);
      encoder.setDelay(delay);

      decoder.advance();
    } finally {
      transformedResource.recycle();
    }
  }

  return encoder.finish();
}
项目:GitHub    文件:ReEncodingGifResourceEncoder.java   
private Resource<Bitmap> getTransformedFrame(Bitmap currentFrame,
    Transformation<Bitmap> transformation, GifDrawable drawable) {
  // TODO: what if current frame is null?
  Resource<Bitmap> bitmapResource = factory.buildFrameResource(currentFrame, bitmapPool);
  Resource<Bitmap> transformedResource =
      transformation.transform(
          context, bitmapResource, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
  if (!bitmapResource.equals(transformedResource)) {
    bitmapResource.recycle();
  }
  return transformedResource;
}
项目:GitHub    文件:DrawableResource.java   
@Override
public void initialize() {
  if (drawable instanceof BitmapDrawable) {
    ((BitmapDrawable) drawable).getBitmap().prepareToDraw();
  } else if (drawable instanceof GifDrawable) {
    ((GifDrawable) drawable).getFirstFrame().prepareToDraw();
  }
}
项目:GitHub    文件:GlideTest.java   
@Test
public void testReceivesGif() throws IOException {
  String fakeUri = "content://fake";
  InputStream testGifData = openResource("test.gif");
  mockUri(Uri.parse(fakeUri), testGifData);

  requestManager.asGif().load(fakeUri).into(target);

  verify(target).onResourceReady(isA(GifDrawable.class), isA(Transition.class));
}
项目:GitHub    文件:GlideTest.java   
@Test
public void testReceivesGifBytes() throws IOException {
  String fakeUri = "content://fake";
  InputStream testGifData = openResource("test.gif");
  mockUri(Uri.parse(fakeUri), testGifData);

  requestManager.as(byte[].class).apply(decodeTypeOf(GifDrawable.class)).load(fakeUri)
      .into(target);

  verify(target).onResourceReady(isA(byte[].class), isA(Transition.class));
}
项目:GitHub    文件:DrawableResourceTest.java   
@Test
public void testReturnsNewDrawableOnGet() {
  GifDrawable expected = mock(GifDrawable.class);
  Drawable.ConstantState constantState = mock(Drawable.ConstantState.class);
  when(constantState.newDrawable()).thenReturn(expected);
  when(drawable.getConstantState()).thenReturn(constantState);

  assertEquals(expected, resource.get());

  verify(drawable).getConstantState();
  verify(constantState).newDrawable();
}
项目:GitHub    文件:GifDrawableBytesTranscoderTest.java   
@Before
public void setUp() {
  gifDrawable = mock(GifDrawable.class);
  resource = mockResource();
  when(resource.get()).thenReturn(gifDrawable);
  transcoder = new GifDrawableBytesTranscoder();
}
项目:GitHub    文件:ReEncodingGifResourceEncoder.java   
@Override
public boolean encode(Resource<GifDrawable> resource, File file, Options options) {
  GifDrawable drawable = resource.get();
  Transformation<Bitmap> transformation = drawable.getFrameTransformation();
  boolean isTransformed = !(transformation instanceof UnitTransformation);
  if (isTransformed && options.get(ENCODE_TRANSFORMATION)) {
    return encodeTransformedToFile(drawable, file);
  } else {
    return writeDataDirect(drawable.getBuffer(), file);
  }
}
项目:GitHub    文件:ReEncodingGifResourceEncoder.java   
private boolean encodeTransformedToStream(GifDrawable drawable, OutputStream os) {
  Transformation<Bitmap> transformation = drawable.getFrameTransformation();
  GifDecoder decoder = decodeHeaders(drawable.getBuffer());
  AnimatedGifEncoder encoder = factory.buildEncoder();
  if (!encoder.start(os)) {
    return false;
  }

  for (int i = 0; i < decoder.getFrameCount(); i++) {
    Bitmap currentFrame = decoder.getNextFrame();
    Resource<Bitmap> transformedResource =
        getTransformedFrame(currentFrame, transformation, drawable);
    try {
      if (!encoder.addFrame(transformedResource.get())) {
        return false;
      }
      int currentFrameIndex = decoder.getCurrentFrameIndex();
      int delay = decoder.getDelay(currentFrameIndex);
      encoder.setDelay(delay);

      decoder.advance();
    } finally {
      transformedResource.recycle();
    }
  }

  return encoder.finish();
}
项目:GitHub    文件:ReEncodingGifResourceEncoder.java   
private Resource<Bitmap> getTransformedFrame(Bitmap currentFrame,
    Transformation<Bitmap> transformation, GifDrawable drawable) {
  // TODO: what if current frame is null?
  Resource<Bitmap> bitmapResource = factory.buildFrameResource(currentFrame, bitmapPool);
  Resource<Bitmap> transformedResource =
      transformation.transform(
          context, bitmapResource, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
  if (!bitmapResource.equals(transformedResource)) {
    bitmapResource.recycle();
  }
  return transformedResource;
}
项目:GitHub    文件:RecyclerAdapter.java   
@NonNull
@Override
public RequestBuilder<GifDrawable> getPreloadRequestBuilder(MediaStoreData item) {
  MediaStoreSignature signature =
      new MediaStoreSignature(item.mimeType, item.dateModified, item.orientation);
  return requestBuilder
      .clone()
      .signature(signature)
      .load(item.uri);
}
项目:GitHub    文件:DrawableResource.java   
@Override
public void initialize() {
  if (drawable instanceof BitmapDrawable) {
    ((BitmapDrawable) drawable).getBitmap().prepareToDraw();
  } else if (drawable instanceof GifDrawable) {
    ((GifDrawable) drawable).getFirstFrame().prepareToDraw();
  }
}
项目:GitHub    文件:GlideContextTest.java   
@Test
public void getDefaultTransitionOptions_withSuperClassRegistered_returnsSuperClassOptions() {
  DrawableTransitionOptions expected = new DrawableTransitionOptions();
  transitionOptions.put(Drawable.class, expected);
  assertThat(context.getDefaultTransitionOptions(BitmapDrawable.class))
      .isEqualTo(expected);
  assertThat(context.getDefaultTransitionOptions(GifDrawable.class))
      .isEqualTo(expected);
}
项目:GitHub    文件:GlideTest.java   
@Test
public void testReceivesGif() throws IOException {
  String fakeUri = "content://fake";
  InputStream testGifData = openGif();
  mockUri(Uri.parse(fakeUri), testGifData);

  requestManager.asGif().load(fakeUri).into(target);

  verify(target).onResourceReady(isA(GifDrawable.class), isA(Transition.class));
}
项目:GitHub    文件:GlideTest.java   
@Test
public void testReceivesGifBytes() throws IOException {
  String fakeUri = "content://fake";
  InputStream testGifData = openGif();
  mockUri(Uri.parse(fakeUri), testGifData);

  requestManager.as(byte[].class).apply(decodeTypeOf(GifDrawable.class)).load(fakeUri)
      .into(target);

  verify(target).onResourceReady(isA(byte[].class), isA(Transition.class));
}
项目:GitHub    文件:DrawableResourceTest.java   
@Test
public void testReturnsNewDrawableOnGet() {
  GifDrawable expected = mock(GifDrawable.class);
  Drawable.ConstantState constantState = mock(Drawable.ConstantState.class);
  when(constantState.newDrawable()).thenReturn(expected);
  when(drawable.getConstantState()).thenReturn(constantState);

  assertThat(resource.get()).isEqualTo(expected);

  verify(drawable).getConstantState();
  verify(constantState).newDrawable();
}
项目:GitHub    文件:GifDrawableBytesTranscoderTest.java   
@Before
public void setUp() {
  gifDrawable = mock(GifDrawable.class);
  resource = mockResource();
  when(resource.get()).thenReturn(gifDrawable);
  transcoder = new GifDrawableBytesTranscoder();
}
项目:PSNine    文件:ImageViewActivity.java   
@Override
public void onResourceReady(T resource, Transition<? super T> transition) {
    gestureImageView.setImageDrawable(resource);
    if (resource instanceof GifDrawable) {
        ((GifDrawable) resource).start();
    }
    swipeRefreshLayout.setRefreshing(false);
}
项目:mvvm-template    文件:UrlDrawable.java   
@Override public void draw(Canvas canvas) {
    if (drawable != null) {
        drawable.draw(canvas);
        if (drawable instanceof GifDrawable) {
            if (!((GifDrawable) drawable).isRunning()) {
                ((GifDrawable) drawable).start();
            }
        }
    }
}
项目:Amumu    文件:DribbbleTarget.java   
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable>
        animation) {
    super.onResourceReady(resource, animation);
    if (!autoplayGifs) {
        resource.stop();
    }

    BadgedFourThreeImageView badgedImageView = (BadgedFourThreeImageView) getView();
    if (resource instanceof GlideBitmapDrawable) {
        Palette.from(((GlideBitmapDrawable) resource).getBitmap())
                .clearFilters()
                .generate(this);
    } else if (resource instanceof GifDrawable) {
        Bitmap image = ((GifDrawable) resource).getFirstFrame();
        Palette.from(image).clearFilters().generate(this);

        // look at the corner to determine the gif badge color
        int cornerSize = (int) (56 * getView().getContext().getResources().getDisplayMetrics
                ().scaledDensity);
        Bitmap corner = Bitmap.createBitmap(image,
                image.getWidth() - cornerSize,
                image.getHeight() - cornerSize,
                cornerSize, cornerSize);
        boolean isDark = ColorUtils.isDark(corner);
        corner.recycle();
        badgedImageView.setBadgeColor(ContextCompat.getColor(getView().getContext(),
                isDark ? R.color.gif_badge_dark_image : R.color.gif_badge_light_image));
    }
}
项目:Amumu    文件:GlideUtils.java   
public static Bitmap getBitmap(GlideDrawable glideDrawable) {
    if (glideDrawable instanceof GlideBitmapDrawable) {
        return ((GlideBitmapDrawable) glideDrawable).getBitmap();
    } else if (glideDrawable instanceof GifDrawable) {
        return ((GifDrawable) glideDrawable).getFirstFrame();
    }
    return null;
}
项目:android-proguards    文件:DribbbleTarget.java   
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable>
        animation) {
    super.onResourceReady(resource, animation);
    if (!autoplayGifs) {
        resource.stop();
    }

    BadgedFourThreeImageView badgedImageView = (BadgedFourThreeImageView) getView();
    if (resource instanceof GlideBitmapDrawable) {
        Palette.from(((GlideBitmapDrawable) resource).getBitmap())
                .clearFilters()
                .generate(this);
    } else if (resource instanceof GifDrawable) {
        Bitmap image = ((GifDrawable) resource).getFirstFrame();
        Palette.from(image).clearFilters().generate(this);

        // look at the corner to determine the gif badge color
        int cornerSize = (int) (56 * getView().getContext().getResources().getDisplayMetrics
                ().scaledDensity);
        Bitmap corner = Bitmap.createBitmap(image,
                image.getWidth() - cornerSize,
                image.getHeight() - cornerSize,
                cornerSize, cornerSize);
        boolean isDark = ColorUtils.isDark(corner);
        corner.recycle();
        badgedImageView.setBadgeColor(ContextCompat.getColor(getView().getContext(),
                isDark ? R.color.gif_badge_dark_image : R.color.gif_badge_light_image));
    }
}
项目:android-proguards    文件:GlideUtils.java   
public static Bitmap getBitmap(GlideDrawable glideDrawable) {
    if (glideDrawable instanceof GlideBitmapDrawable) {
        return ((GlideBitmapDrawable) glideDrawable).getBitmap();
    } else if (glideDrawable instanceof GifDrawable) {
        return ((GifDrawable) glideDrawable).getFirstFrame();
    }
    return null;
}
项目:OldDriver-master    文件:DribbbleTarget.java   
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable>
        animation) {
    super.onResourceReady(resource, animation);
    if (!autoplayGifs) {
        resource.stop();
    }

    BadgedFourThreeImageView badgedImageView = (BadgedFourThreeImageView) getView();
    if (resource instanceof GlideBitmapDrawable) {
        Palette.from(((GlideBitmapDrawable) resource).getBitmap())
                .clearFilters()
                .generate(this);
    } else if (resource instanceof GifDrawable) {
        Bitmap image = ((GifDrawable) resource).getFirstFrame();
        Palette.from(image).clearFilters().generate(this);

        // look at the corner to determine the gif badge color
        int cornerSize = (int) (56 * getView().getContext().getResources().getDisplayMetrics
                ().scaledDensity);
        Bitmap corner = Bitmap.createBitmap(image,
                image.getWidth() - cornerSize,
                image.getHeight() - cornerSize,
                cornerSize, cornerSize);
        boolean isDark = ColorUtils.isDark(corner);
        corner.recycle();
        badgedImageView.setBadgeColor(ContextCompat.getColor(getView().getContext(),
                isDark ? R.color.gif_badge_dark_image : R.color.gif_badge_light_image));
    }
}
项目:OldDriver-master    文件:GlideUtils.java   
public static Bitmap getBitmap(GlideDrawable glideDrawable) {
    if (glideDrawable instanceof GlideBitmapDrawable) {
        return ((GlideBitmapDrawable) glideDrawable).getBitmap();
    } else if (glideDrawable instanceof GifDrawable) {
        return ((GifDrawable) glideDrawable).getFirstFrame();
    }
    return null;
}
项目:LoyalNativeSlider    文件:LoyalUtil.java   
public static void hybridImplementation(String u, final ImageView target, Context context, final Runnable callback) {
    if (u.contains(".gif")) {
        Glide.with(context).asGif().load(u)
                .apply(getOpt())
                .into(new ImageViewTarget<GifDrawable>(target) {
                    @Override
                    protected void setResource(GifDrawable resource) {
                        target.setImageDrawable(resource);
                        callback.run();
                    }
                });
    } else {
        picassoImplementation(u, target, context, callback);
    }
}
项目:RichText    文件:ImageTargetGif.java   
@Override
public void recycle() {
    Glide.clear(this);
    if (gifDrawableSoftReference != null) {
        GifDrawable gifDrawable = gifDrawableSoftReference.get();
        if (gifDrawable != null) {
            gifDrawable.setCallback(null);
            gifDrawable.stop();
        }
    }
}
项目:RichText    文件:ImageTargetGif.java   
@Override
public void onResourceReady(GifDrawable resource, GlideAnimation<? super GifDrawable> glideAnimation) {
    if (!activityIsAlive()) {
        return;
    }
    DrawableWrapper drawableWrapper = urlDrawableWeakReference.get();
    if (drawableWrapper == null) {
        return;
    }
    holder.setImageState(ImageHolder.ImageState.READY);
    gifDrawableSoftReference = new SoftReference<>(resource);
    Bitmap first = resource.getFirstFrame();
    holder.setSize(first.getWidth(), first.getHeight());
    drawableWrapper.setDrawable(resource);
    if (rect != null) {
        drawableWrapper.setBounds(rect);
    } else {
        if (!config.autoFix && config.imageFixCallback != null) {
            config.imageFixCallback.onImageReady(holder, first.getWidth(), first.getHeight());
        }
        if (config.autoFix || holder.isAutoFix() || !holder.isInvalidateSize()) {
            int width = getRealWidth();
            int height = (int) ((float) first.getHeight() * width / first.getWidth());
            drawableWrapper.setBounds(0, 0, width, height);
        } else {
            drawableWrapper.setBounds(0, 0, holder.getWidth(), holder.getHeight());
        }
        if (holder.isAutoPlay()) {
            resource.setCallback(this);
            resource.start();
            resource.setLoopCount(GlideDrawable.LOOP_FOREVER);
        }
    }
    resetText();
    loadDone();
}
项目:GitHub    文件:GifDrawableBytesTranscoder.java   
@Override
public Resource<byte[]> transcode(Resource<GifDrawable> toTranscode) {
  GifDrawable gifData = toTranscode.get();
  ByteBuffer byteBuffer = gifData.getBuffer();
  return new BytesResource(ByteBufferUtil.toBytes(byteBuffer));
}
项目:GitHub    文件:GlideRequests.java   
@Override
@CheckResult
public GlideRequest<GifDrawable> asGif() {
  return (GlideRequest<GifDrawable>) super.asGif();
}
项目:GitHub    文件:GlideRequests.java   
@Override
@CheckResult
public GlideRequest<GifDrawable> asGif() {
  return (GlideRequest<GifDrawable>) super.asGif();
}
项目:GitHub    文件:GlideRequests.java   
@Override
@CheckResult
public GlideRequest<GifDrawable> asGif() {
  return (GlideRequest<GifDrawable>) super.asGif();
}
项目:GitHub    文件:GifDrawableBytesTranscoder.java   
@Override
public Resource<byte[]> transcode(Resource<GifDrawable> toTranscode, Options options) {
  GifDrawable gifData = toTranscode.get();
  ByteBuffer byteBuffer = gifData.getBuffer();
  return new BytesResource(ByteBufferUtil.toBytes(byteBuffer));
}