| package com.airbnb.lottie.model.content; |
| |
| import android.util.JsonReader; |
| import android.util.Log; |
| |
| import com.airbnb.lottie.L; |
| import com.airbnb.lottie.LottieComposition; |
| import com.airbnb.lottie.model.animatable.AnimatableIntegerValue; |
| import com.airbnb.lottie.model.animatable.AnimatableShapeValue; |
| import com.airbnb.lottie.parser.AnimatableValueParser; |
| |
| import java.io.IOException; |
| |
| public class Mask { |
| public enum MaskMode { |
| MaskModeAdd, |
| MaskModeSubtract, |
| MaskModeIntersect |
| } |
| |
| private final MaskMode maskMode; |
| private final AnimatableShapeValue maskPath; |
| private final AnimatableIntegerValue opacity; |
| |
| private Mask(MaskMode maskMode, AnimatableShapeValue maskPath, AnimatableIntegerValue opacity) { |
| this.maskMode = maskMode; |
| this.maskPath = maskPath; |
| this.opacity = opacity; |
| } |
| |
| public static class Factory { |
| private Factory() { |
| } |
| |
| public static Mask newMask( |
| JsonReader reader, LottieComposition composition) throws IOException { |
| MaskMode maskMode = null; |
| AnimatableShapeValue maskPath = null; |
| AnimatableIntegerValue opacity = null; |
| |
| reader.beginObject(); |
| while (reader.hasNext()) { |
| String mode = reader.nextName(); |
| switch (mode) { |
| case "mode": |
| switch (reader.nextString()) { |
| case "a": |
| maskMode = MaskMode.MaskModeAdd; |
| break; |
| case "s": |
| maskMode = MaskMode.MaskModeSubtract; |
| break; |
| case "i": |
| maskMode = MaskMode.MaskModeIntersect; |
| break; |
| default: |
| Log.w(L.TAG, "Unknown mask mode " + mode + ". Defaulting to Add."); |
| maskMode = MaskMode.MaskModeAdd; |
| } |
| break; |
| case "pt": |
| maskPath = AnimatableValueParser.parseShapeData(reader, composition); |
| break; |
| case "o": |
| opacity = AnimatableValueParser.parseInteger(reader, composition); |
| break; |
| default: |
| reader.skipValue(); |
| } |
| } |
| reader.endObject(); |
| |
| return new Mask(maskMode, maskPath, opacity); |
| } |
| } |
| |
| public MaskMode getMaskMode() { |
| return maskMode; |
| } |
| |
| public AnimatableShapeValue getMaskPath() { |
| return maskPath; |
| } |
| |
| public AnimatableIntegerValue getOpacity() { |
| return opacity; |
| } |
| } |