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);