WIP
diff --git a/LottieSample/src/main/assets/Tests/Airbnb400.zip b/LottieSample/src/main/assets/Tests/Airbnb400.zip
new file mode 100644
index 0000000..24021ad
--- /dev/null
+++ b/LottieSample/src/main/assets/Tests/Airbnb400.zip
Binary files differ
diff --git a/LottieSample/src/main/assets/Tests/Airbnb800.zip b/LottieSample/src/main/assets/Tests/Airbnb800.zip
new file mode 100644
index 0000000..97105b5
--- /dev/null
+++ b/LottieSample/src/main/assets/Tests/Airbnb800.zip
Binary files differ
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java b/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java
index 40d511e..15399a0 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java
@@ -14,6 +14,7 @@
import com.airbnb.lottie.network.NetworkFetcher;
import com.airbnb.lottie.parser.LottieCompositionParser;
+import com.airbnb.lottie.utils.Utils;
import org.json.JSONObject;
import java.io.IOException;
@@ -314,7 +315,7 @@
for (Map.Entry<String, Bitmap> e : images.entrySet()) {
LottieImageAsset imageAsset = findImageAssetForFileName(composition, e.getKey());
if (imageAsset != null) {
- imageAsset.setBitmap(e.getValue());
+ imageAsset.setBitmap(Utils.resizeBitmapIfNeeded(e.getValue(), imageAsset.getWidth(), imageAsset.getHeight()));
}
}
diff --git a/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java b/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java
index aff6f77..f31378d 100644
--- a/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java
+++ b/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java
@@ -12,6 +12,7 @@
import com.airbnb.lottie.ImageAssetDelegate;
import com.airbnb.lottie.LottieImageAsset;
import com.airbnb.lottie.utils.Logger;
+import com.airbnb.lottie.utils.Utils;
import java.io.IOException;
import java.io.InputStream;
@@ -113,6 +114,7 @@
return null;
}
bitmap = BitmapFactory.decodeStream(is, null, opts);
+ bitmap = Utils.resizeBitmapIfNeeded(bitmap, asset.getWidth(), asset.getHeight());
return putBitmap(id, bitmap);
}
diff --git a/lottie/src/main/java/com/airbnb/lottie/utils/Utils.java b/lottie/src/main/java/com/airbnb/lottie/utils/Utils.java
index cad6e2b..83110b2 100644
--- a/lottie/src/main/java/com/airbnb/lottie/utils/Utils.java
+++ b/lottie/src/main/java/com/airbnb/lottie/utils/Utils.java
@@ -228,6 +228,21 @@
}
/**
+ * Resize the bitmap to exactly the same size as the specified dimension, changing the aspect ratio if needed.
+ * Returns the original bitmap if the dimensions already match.
+ */
+ public static Bitmap resizeBitmapIfNeeded(Bitmap bitmap, int width, int height) {
+ if (bitmap.getWidth() == width && bitmap.getHeight() == height) {
+ return bitmap;
+ }
+ float scaleWidth = ((float) width) / bitmap.getWidth();
+ float scaleHeight = ((float) height) / bitmap.getHeight();
+ Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
+ bitmap.recycle();
+ return resizedBitmap;
+ }
+
+ /**
* For testing purposes only. DO NOT USE IN PRODUCTION.
*/
public static Bitmap renderPath(Path path) {