예제 #1
0
        internal ContentGroup(LottieDrawable lottieDrawable, BaseLayer layer, ShapeGroup shapeGroup)
        {
            Name = shapeGroup.Name;
            var items = shapeGroup.Items;

            if (items.Count == 0)
            {
                return;
            }

            if (items[items.Count - 1] is AnimatableTransform animatableTransform)
            {
                _transformAnimation = animatableTransform.CreateAnimation();

                _transformAnimation.AddAnimationsToLayer(layer);
                _transformAnimation.ValueChanged += (sender, args) =>
                {
                    lottieDrawable.InvalidateSelf();
                };
            }

            for (var i = 0; i < items.Count; i++)
            {
                var item = items[i];
                if (item is ShapeFill)
                {
                    _contents.Add(new FillContent(lottieDrawable, layer, (ShapeFill)item));
                }
                else if (item is GradientFill)
                {
                    _contents.Add(new GradientFillContent(lottieDrawable, layer, (GradientFill)item));
                }
                else if (item is ShapeStroke)
                {
                    _contents.Add(new StrokeContent(lottieDrawable, layer, (ShapeStroke)item));
                }
                else if (item is GradientStroke)
                {
                    _contents.Add(new GradientStrokeContent(lottieDrawable, layer, (GradientStroke)item));
                }
                else if (item is ShapeGroup)
                {
                    _contents.Add(new ContentGroup(lottieDrawable, layer, (ShapeGroup)item));
                }
                else if (item is RectangleShape)
                {
                    _contents.Add(new RectangleContent(lottieDrawable, layer, (RectangleShape)item));
                }
                else if (item is CircleShape)
                {
                    _contents.Add(new EllipseContent(lottieDrawable, layer, (CircleShape)item));
                }
                else if (item is ShapePath)
                {
                    _contents.Add(new ShapeContent(lottieDrawable, layer, (ShapePath)item));
                }
                else if (item is PolystarShape)
                {
                    _contents.Add(new PolystarContent(lottieDrawable, layer, (PolystarShape)item));
                }
                else if (item is ShapeTrimPath)
                {
                    _contents.Add(new TrimPathContent(layer, (ShapeTrimPath)item));
                }
                else
                {
                    if (item is MergePaths mergePaths)
                    {
                        if (lottieDrawable.EnableMergePathsForKitKatAndAbove())
                        {
                            _contents.Add(new MergePathsContent(mergePaths));
                        }
                        else
                        {
                            Debug.WriteLine("Animation contains merge paths but they are disabled.", Tag);
                        }
                    }
                }
            }

            IList <IContent>  contentsToRemove         = new List <IContent>();
            MergePathsContent currentMergePathsContent = null;

            for (var i = _contents.Count - 1; i >= 0; i--)
            {
                var content = _contents[i];
                if (content is MergePathsContent mergePathsContent)
                {
                    currentMergePathsContent = mergePathsContent;
                }
                if (currentMergePathsContent != null && content != currentMergePathsContent)
                {
                    currentMergePathsContent.AddContentIfNeeded(content);
                    contentsToRemove.Add(content);
                }
            }

            for (var i = _contents.Count - 1; i >= 0; i--)
            {
                if (contentsToRemove.Contains(_contents[i]))
                {
                    _contents.RemoveAt(i);
                }
            }
        }
예제 #2
0
 public IContent ToContent(LottieDrawable drawable, BaseLayer layer)
 {
     return(new GradientStrokeContent(drawable, layer, this));
 }
예제 #3
0
 public IContent ToContent(LottieDrawable drawable, BaseLayer layer)
 {
     return(new ShapeContent(drawable, layer, this));
 }