diff options
author | Sam Judd <judds@google.com> | 2014-10-20 10:18:21 -0700 |
---|---|---|
committer | Sam Judd <judds@google.com> | 2014-10-20 10:32:03 -0700 |
commit | 38ced22f14acd14b69bb102605505d1feb04b46b (patch) | |
tree | 012a55363edf85f7a5c7bf11f4587c13d3b4e4a0 /library | |
parent | 3ea7f151576f197df4bd6c3cce46f229cc281698 (diff) | |
download | glide-38ced22f14acd14b69bb102605505d1feb04b46b.tar.gz |
Apply gravity in GifDrawable.
Fixes #206
Diffstat (limited to 'library')
-rw-r--r-- | library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java | 24 | ||||
-rw-r--r-- | library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java | 20 |
2 files changed, 35 insertions, 9 deletions
diff --git a/library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java b/library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java index c7378927..20b1998e 100644 --- a/library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java +++ b/library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java @@ -4,6 +4,7 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PixelFormat; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import com.bumptech.glide.gifdecoder.GifDecoder; import com.bumptech.glide.gifdecoder.GifHeader; @@ -23,7 +24,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isNull; import static org.mockito.Mockito.mock; @@ -60,7 +60,7 @@ public class GifDrawableTest { Canvas canvas = mock(Canvas.class); drawable.draw(canvas); - verify(canvas).drawBitmap(eq(firstFrame), anyInt(), anyInt(), any(Paint.class)); + verify(canvas).drawBitmap(eq(firstFrame), anyRect(), anyRect(), anyPaint()); } @Test @@ -71,8 +71,8 @@ public class GifDrawableTest { when(frameManager.getCurrentFrame()).thenReturn(null); drawable.draw(canvas); - verify(canvas).drawBitmap(eq(firstFrame), anyInt(), anyInt(), any(Paint.class)); - verify(canvas, never()).drawBitmap((Bitmap) isNull(), anyInt(), anyInt(), any(Paint.class)); + verify(canvas).drawBitmap(eq(firstFrame), anyRect(), anyRect(), anyPaint()); + verify(canvas, never()).drawBitmap((Bitmap) isNull(), anyRect(), anyRect(), anyPaint()); } @Test @@ -80,7 +80,7 @@ public class GifDrawableTest { drawable = new GifDrawable(gifDecoder, frameManager, null, bitmapPool); Canvas canvas = mock(Canvas.class); - verify(canvas, never()).drawBitmap(any(Bitmap.class), anyInt(), anyInt(), any(Paint.class)); + verify(canvas, never()).drawBitmap(any(Bitmap.class), anyRect(), anyRect(), anyPaint()); } @Test @@ -90,8 +90,8 @@ public class GifDrawableTest { when(frameManager.getCurrentFrame()).thenReturn(currentFrame); drawable.draw(canvas); - verify(canvas).drawBitmap(eq(currentFrame), anyInt(), anyInt(), any(Paint.class)); - verify(canvas, never()).drawBitmap(eq(firstFrame), anyInt(), anyInt(), any(Paint.class)); + verify(canvas).drawBitmap(eq(currentFrame), anyRect(), anyRect(), anyPaint()); + verify(canvas, never()).drawBitmap(eq(firstFrame), anyRect(), anyRect(), anyPaint()); } @Test @@ -459,7 +459,15 @@ public class GifDrawableTest { drawable.recycle(); Canvas canvas = mock(Canvas.class); drawable.draw(canvas); - verify(canvas, never()).drawBitmap(any(Bitmap.class), anyInt(), anyInt(), any(Paint.class)); + verify(canvas, never()).drawBitmap(any(Bitmap.class), anyRect(), anyRect(), anyPaint()); + } + + private static Paint anyPaint() { + return any(Paint.class); + } + + private static Rect anyRect() { + return any(Rect.class); } private void runLoops(int loopCount, int frameCount) { 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; |