Clear mask canvases on pre-Pie (#1327)

Fixes #1253
diff --git a/LottieSample/src/main/res/layout/control_bar.xml b/LottieSample/src/main/res/layout/control_bar.xml
index c8a0d1d..582de95 100644
--- a/LottieSample/src/main/res/layout/control_bar.xml
+++ b/LottieSample/src/main/res/layout/control_bar.xml
@@ -24,6 +24,11 @@
             android:id="@+id/warningsButton"
             style="@style/ControlBarItem" />
         <com.airbnb.lottie.samples.views.ControlBarItemToggleView
+            android:id="@+id/scaleToggle"
+            style="@style/ControlBarItem"
+            app:src="@drawable/ic_scale"
+            app:text="@string/control_bar_scale" />
+        <com.airbnb.lottie.samples.views.ControlBarItemToggleView
             android:id="@+id/borderToggle"
             style="@style/ControlBarItem"
             app:src="@drawable/ic_device"
@@ -39,11 +44,6 @@
             app:src="@drawable/ic_content_cut"
             app:text="@string/control_bar_trim" />
         <com.airbnb.lottie.samples.views.ControlBarItemToggleView
-            android:id="@+id/scaleToggle"
-            style="@style/ControlBarItem"
-            app:src="@drawable/ic_scale"
-            app:text="@string/control_bar_scale" />
-        <com.airbnb.lottie.samples.views.ControlBarItemToggleView
             android:id="@+id/speedToggle"
             style="@style/ControlBarItem"
             app:src="@drawable/ic_fast_forward"
diff --git a/lottie/src/main/java/com/airbnb/lottie/model/layer/BaseLayer.java b/lottie/src/main/java/com/airbnb/lottie/model/layer/BaseLayer.java
index 3386fa8..6543295 100644
--- a/lottie/src/main/java/com/airbnb/lottie/model/layer/BaseLayer.java
+++ b/lottie/src/main/java/com/airbnb/lottie/model/layer/BaseLayer.java
@@ -379,6 +379,11 @@
   private void applyMasks(Canvas canvas, Matrix matrix) {
     L.beginSection("Layer#saveLayer");
     saveLayerCompat(canvas, rect, dstInPaint, false);
+    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
+      // Pre-Pie, offscreen buffers were opaque which meant that outer border of a mask
+      // might get drawn depending on the result of float rounding.
+      canvas.drawColor(Color.TRANSPARENT);
+    }
     L.endSection("Layer#saveLayer");
     for (int i = 0; i < mask.getMasks().size(); i++) {
       Mask mask = this.mask.getMasks().get(i);
@@ -394,10 +399,9 @@
           break;
         case MASK_MODE_SUBTRACT:
           if (i == 0) {
-            // TODO: make a paint for this.
-            Paint paint = new Paint();
-            paint.setColor(Color.BLACK);
-            canvas.drawRect(rect, paint);
+            contentPaint.setColor(Color.BLACK);
+            contentPaint.setAlpha(255);
+            canvas.drawRect(rect, contentPaint);
           }
           if (mask.isInverted()) {
             applyInvertedSubtractMask(canvas, matrix, mask, maskAnimation, opacityAnimation);