| package com.airbnb.lottie; |
| |
| import android.graphics.Canvas; |
| import android.graphics.Matrix; |
| import android.graphics.Paint; |
| import android.graphics.Path; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| class FillContent implements DrawingContent, BaseKeyframeAnimation.AnimationListener { |
| private final Path path = new Path(); |
| private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); |
| private final List<PathContent> paths = new ArrayList<>(); |
| private final KeyframeAnimation<Integer> colorAnimation; |
| private final KeyframeAnimation<Integer> opacityAnimation; |
| private final LottieDrawable lottieDrawable; |
| |
| FillContent(final LottieDrawable lottieDrawable, BaseLayer layer, ShapeFill fill) { |
| this.lottieDrawable = lottieDrawable; |
| if (fill.getColor() == null || fill.getOpacity() == null ) { |
| colorAnimation = null; |
| opacityAnimation = null; |
| return; |
| } |
| |
| path.setFillType(fill.getFillType()); |
| |
| colorAnimation = fill.getColor().createAnimation(); |
| colorAnimation.addUpdateListener(this); |
| layer.addAnimation(colorAnimation); |
| opacityAnimation = fill.getOpacity().createAnimation(); |
| opacityAnimation.addUpdateListener(this); |
| layer.addAnimation(opacityAnimation); |
| } |
| |
| @Override public void onValueChanged() { |
| lottieDrawable.invalidateSelf(); |
| } |
| |
| @Override public void setContents(List<Content> contentsBefore, List<Content> contentsAfter) { |
| for (int i = 0; i < contentsAfter.size(); i++) { |
| Content content = contentsAfter.get(i); |
| if (content instanceof PathContent) { |
| paths.add((PathContent) content); |
| } |
| } |
| } |
| |
| @Override public void draw(Canvas canvas, Matrix parentMatrix, int parentAlpha) { |
| paint.setColor(colorAnimation.getValue()); |
| int alpha = (int) ((parentAlpha / 255f * opacityAnimation.getValue() / 100f) * 255); |
| paint.setAlpha(alpha); |
| |
| path.reset(); |
| for (int i = 0; i < paths.size(); i++) { |
| path.addPath(paths.get(i).getPath(), parentMatrix); |
| } |
| |
| canvas.drawPath(path, paint); |
| } |
| } |