aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com
diff options
context:
space:
mode:
authorSam Judd <judds@google.com>2014-10-20 10:18:21 -0700
committerSam Judd <judds@google.com>2014-10-20 10:32:03 -0700
commit38ced22f14acd14b69bb102605505d1feb04b46b (patch)
tree012a55363edf85f7a5c7bf11f4587c13d3b4e4a0 /library/src/main/java/com
parent3ea7f151576f197df4bd6c3cce46f229cc281698 (diff)
downloadglide-38ced22f14acd14b69bb102605505d1feb04b46b.tar.gz
Apply gravity in GifDrawable.
Fixes #206
Diffstat (limited to 'library/src/main/java/com')
-rw-r--r--library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java20
1 files changed, 19 insertions, 1 deletions
diff --git a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
index 0f2e649e..1ed836c0 100644
--- a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
+++ b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
@@ -8,9 +8,11 @@ import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.view.Gravity;
import com.bumptech.glide.gifdecoder.GifDecoder;
import com.bumptech.glide.gifdecoder.GifHeader;
import com.bumptech.glide.load.Transformation;
@@ -22,6 +24,7 @@ import com.bumptech.glide.load.resource.drawable.GlideDrawable;
*/
public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameCallback {
private final Paint paint = new Paint();
+ private final Rect destRect = new Rect();
private final GifFrameManager frameManager;
private final GifState state;
private final GifDecoder decoder;
@@ -43,6 +46,8 @@ public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameC
/** The number of times to loop through the gif animation. */
private int maxLoopCount = LOOP_FOREVER;
+ private boolean applyGravity;
+
/**
* Constructor for GifDrawable.
*
@@ -178,13 +183,25 @@ public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameC
}
@Override
+ protected void onBoundsChange(Rect bounds) {
+ super.onBoundsChange(bounds);
+ applyGravity = true;
+ }
+
+ @Override
public void draw(Canvas canvas) {
if (isRecycled) {
return;
}
+
+ if (applyGravity) {
+ Gravity.apply(GifState.GRAVITY, getIntrinsicWidth(), getIntrinsicHeight(), getBounds(), destRect);
+ applyGravity = false;
+ }
+
Bitmap currentFrame = frameManager.getCurrentFrame();
Bitmap toDraw = currentFrame != null ? currentFrame : state.firstFrame;
- canvas.drawBitmap(toDraw, 0, 0, paint);
+ canvas.drawBitmap(toDraw, null, destRect, paint);
}
@Override
@@ -266,6 +283,7 @@ public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameC
}
static class GifState extends ConstantState {
+ private static final int GRAVITY = Gravity.FILL;
String id;
GifHeader gifHeader;
byte[] data;