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;
+  }
 }