/** * Copyright (c) 2016-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.keyframes.model.keyframedmodels; import java.util.List; import com.facebook.keyframes.model.KFAnimation; import com.facebook.keyframes.model.KFAnimation.PropertyType; import com.facebook.keyframes.model.KFAnimationFrame; /** * This is a special cased KFAnimation, since it is the only animation which is not applied * via a matrix. The information for this Modifiable is packed into a single length array. * A {@link KeyFramedObject} which houses information about a stroke width animation. This includes * float values for stroke width at any given key frame. This is a post-process object used for * KFAnimation. */ public class KeyFramedOpacity extends KeyFramedObject<KFAnimationFrame, KeyFramedOpacity.Opacity> { /** * A container object so that this class can set values on an object which on a common reference. */ public static class Opacity { private float mOpacity = 100; public float getOpacity() { return mOpacity; } public void setOpacity(float opacity) { mOpacity = opacity; } } /** * Constructs a KeyFramedOpacity from a {@link KFAnimation}. */ public static KeyFramedOpacity fromAnimation(KFAnimation animation) { if (animation.getPropertyType() != KFAnimation.PropertyType.OPACITY) { throw new IllegalArgumentException( "Cannot create a KeyFramedOpacity object from a non OPACITY animation."); } return new KeyFramedOpacity(animation.getAnimationFrames(), animation.getTimingCurves()); } public KeyFramedOpacity( List<KFAnimationFrame> objects, float[][][] timingCurves) { super(objects, timingCurves); } private KeyFramedOpacity() { super(); } /** * Applies the current state, given by interpolationValue, to the Opacity object. * @param stateA Initial state * @param stateB End state * @param interpolationValue Progress [0..1] between stateA and stateB * @param modifiable The Opacity to apply the values to */ @Override protected void applyImpl( KFAnimationFrame stateA, KFAnimationFrame stateB, float interpolationValue, Opacity modifiable) { if (stateB == null) { modifiable.setOpacity(stateA.getData()[0]); return; } modifiable.setOpacity( interpolateValue(stateA.getData()[0], stateB.getData()[0], interpolationValue)); } }