Search in sources :

Example 1 with SparseArrayCompat

use of androidx.collection.SparseArrayCompat in project lottie-android by airbnb.

the class LottieCompositionMoshiParser method parse.

public static LottieComposition parse(JsonReader reader) throws IOException {
    float scale = Utils.dpScale();
    float startFrame = 0f;
    float endFrame = 0f;
    float frameRate = 0f;
    final LongSparseArray<Layer> layerMap = new LongSparseArray<>();
    final List<Layer> layers = new ArrayList<>();
    int width = 0;
    int height = 0;
    Map<String, List<Layer>> precomps = new HashMap<>();
    Map<String, LottieImageAsset> images = new HashMap<>();
    Map<String, Font> fonts = new HashMap<>();
    List<Marker> markers = new ArrayList<>();
    SparseArrayCompat<FontCharacter> characters = new SparseArrayCompat<>();
    LottieComposition composition = new LottieComposition();
    reader.beginObject();
    while (reader.hasNext()) {
        switch(reader.selectName(NAMES)) {
            case 0:
                width = reader.nextInt();
                break;
            case 1:
                height = reader.nextInt();
                break;
            case 2:
                startFrame = (float) reader.nextDouble();
                break;
            case 3:
                endFrame = (float) reader.nextDouble() - 0.01f;
                break;
            case 4:
                frameRate = (float) reader.nextDouble();
                break;
            case 5:
                String version = reader.nextString();
                String[] versions = version.split("\\.");
                int majorVersion = Integer.parseInt(versions[0]);
                int minorVersion = Integer.parseInt(versions[1]);
                int patchVersion = Integer.parseInt(versions[2]);
                if (!Utils.isAtLeastVersion(majorVersion, minorVersion, patchVersion, 4, 4, 0)) {
                    composition.addWarning("Lottie only supports bodymovin >= 4.4.0");
                }
                break;
            case 6:
                parseLayers(reader, composition, layers, layerMap);
                break;
            case 7:
                parseAssets(reader, composition, precomps, images);
                break;
            case 8:
                parseFonts(reader, fonts);
                break;
            case 9:
                parseChars(reader, composition, characters);
                break;
            case 10:
                parseMarkers(reader, markers);
                break;
            default:
                reader.skipName();
                reader.skipValue();
        }
    }
    int scaledWidth = (int) (width * scale);
    int scaledHeight = (int) (height * scale);
    Rect bounds = new Rect(0, 0, scaledWidth, scaledHeight);
    composition.init(bounds, startFrame, endFrame, frameRate, layers, layerMap, precomps, images, characters, fonts, markers);
    return composition;
}
Also used : LongSparseArray(androidx.collection.LongSparseArray) Rect(android.graphics.Rect) HashMap(java.util.HashMap) LottieImageAsset(com.airbnb.lottie.LottieImageAsset) ArrayList(java.util.ArrayList) Marker(com.airbnb.lottie.model.Marker) Layer(com.airbnb.lottie.model.layer.Layer) Font(com.airbnb.lottie.model.Font) FontCharacter(com.airbnb.lottie.model.FontCharacter) ArrayList(java.util.ArrayList) List(java.util.List) LottieComposition(com.airbnb.lottie.LottieComposition) SparseArrayCompat(androidx.collection.SparseArrayCompat)

Aggregations

Rect (android.graphics.Rect)1 LongSparseArray (androidx.collection.LongSparseArray)1 SparseArrayCompat (androidx.collection.SparseArrayCompat)1 LottieComposition (com.airbnb.lottie.LottieComposition)1 LottieImageAsset (com.airbnb.lottie.LottieImageAsset)1 Font (com.airbnb.lottie.model.Font)1 FontCharacter (com.airbnb.lottie.model.FontCharacter)1 Marker (com.airbnb.lottie.model.Marker)1 Layer (com.airbnb.lottie.model.layer.Layer)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1