Ran tests (#179)
diff --git a/LottieSample/screenshots/LottieLogo1.png b/LottieSample/screenshots/LottieLogo1.png
index a402f3b..54744cb 100644
--- a/LottieSample/screenshots/LottieLogo1.png
+++ b/LottieSample/screenshots/LottieLogo1.png
Binary files differ
diff --git a/LottieSample/screenshots/LottieLogo2.png b/LottieSample/screenshots/LottieLogo2.png
index f9355c8..3871e29 100644
--- a/LottieSample/screenshots/LottieLogo2.png
+++ b/LottieSample/screenshots/LottieLogo2.png
Binary files differ
diff --git a/LottieSample/screenshots/MotionCorpse-Jrcanest.png b/LottieSample/screenshots/MotionCorpse-Jrcanest.png
index c7eea27..713a34a 100644
--- a/LottieSample/screenshots/MotionCorpse-Jrcanest.png
+++ b/LottieSample/screenshots/MotionCorpse-Jrcanest.png
Binary files differ
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
index 3e0369d..7f0fd5f 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
@@ -6,14 +6,12 @@
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Build;
-import android.os.Looper;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.Settings;
import android.support.annotation.FloatRange;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.annotation.UiThread;
import android.support.annotation.VisibleForTesting;
import android.support.v7.widget.AppCompatImageView;
import android.text.TextUtils;
@@ -174,10 +172,7 @@
super.onDetachedFromWindow();
}
- @UiThread @VisibleForTesting void recycleBitmaps() {
- if (Looper.myLooper() != Looper.getMainLooper()) {
- throw new IllegalStateException("This must be called from the main thread.");
- }
+ @VisibleForTesting void recycleBitmaps() {
lottieDrawable.recycleBitmaps();
}
@@ -268,6 +263,21 @@
return;
}
+ int screenWidth = Utils.getScreenWidth(getContext());
+ int screenHeight = Utils.getScreenHeight(getContext());
+ int compWidth = composition.getBounds().width();
+ int compHeight = composition.getBounds().height();
+ if (compWidth > screenWidth ||
+ compHeight > screenHeight) {
+ float xScale = screenWidth / (float) compWidth;
+ float yScale = screenHeight / (float) compHeight;
+ setScale(Math.min(xScale, yScale));
+ Log.w(L.TAG, String.format(
+ "Composition larger than the screen %dx%d vs %dx%d. Scaling down.",
+ compWidth, compHeight, screenWidth, screenHeight));
+ }
+
+
// If you set a different composition on the view, the bounds will not update unless
// the drawable is different than the original.
setImageDrawable(null);
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
index b6b7132..03dbf82 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
@@ -132,6 +132,7 @@
clearComposition();
this.composition = composition;
setSpeed(speed);
+ setScale(1f);
updateBounds();
buildLayersForComposition(composition);
@@ -196,9 +197,6 @@
if (composition == null) {
return;
}
- float xScale = canvas.getWidth() / (float) composition.getBounds().width();
- float yScale = canvas.getHeight() / (float) composition.getBounds().height();
- setScale(Math.min(xScale, yScale));
int saveCount = canvas.save();
canvas.clipRect(0, 0, getIntrinsicWidth(), getIntrinsicHeight());
diff --git a/lottie/src/main/java/com/airbnb/lottie/Utils.java b/lottie/src/main/java/com/airbnb/lottie/Utils.java
index 789d410..69824df 100644
--- a/lottie/src/main/java/com/airbnb/lottie/Utils.java
+++ b/lottie/src/main/java/com/airbnb/lottie/Utils.java
@@ -1,12 +1,16 @@
package com.airbnb.lottie;
+import android.content.Context;
import android.graphics.Path;
import android.graphics.PointF;
+import android.util.DisplayMetrics;
+import android.view.WindowManager;
import java.io.Closeable;
final class Utils {
private static PointF emptyPoint;
+ private static DisplayMetrics displayMetrics;
static PointF emptyPoint() {
if (emptyPoint == null) {
@@ -40,4 +44,22 @@
}
}
}
+
+ static int getScreenWidth(Context context) {
+ if (displayMetrics == null) {
+ displayMetrics = new DisplayMetrics();
+ }
+ WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ wm.getDefaultDisplay().getMetrics(displayMetrics);
+ return displayMetrics.widthPixels;
+ }
+
+ static int getScreenHeight(Context context) {
+ if (displayMetrics == null) {
+ displayMetrics = new DisplayMetrics();
+ }
+ WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ wm.getDefaultDisplay().getMetrics(displayMetrics);
+ return displayMetrics.heightPixels;
+ }
}