// Copyright 2004-present Facebook. All Rights Reserved.
package com.facebook.react.uimanager.layoutanimation;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import com.facebook.react.uimanager.IllegalViewOperationException;
/**
* Class responsible for default layout animation, i.e animation of view creation and deletion.
*/
/* package */ abstract class BaseLayoutAnimation extends AbstractLayoutAnimation {
abstract boolean isReverse();
@Override
boolean isValid() {
return mDurationMs > 0 && mAnimatedProperty != null;
}
@Override
Animation createAnimationImpl(View view, int x, int y, int width, int height) {
if (mAnimatedProperty != null) {
switch (mAnimatedProperty) {
case OPACITY: {
float fromValue = isReverse() ? view.getAlpha() : 0.0f;
float toValue = isReverse() ? 0.0f : view.getAlpha();
return new OpacityAnimation(view, fromValue, toValue);
}
case SCALE_XY: {
float fromValue = isReverse() ? 1.0f : 0.0f;
float toValue = isReverse() ? 0.0f : 1.0f;
return new ScaleAnimation(
fromValue,
toValue,
fromValue,
toValue,
Animation.RELATIVE_TO_SELF,
.5f,
Animation.RELATIVE_TO_SELF,
.5f);
}
default:
throw new IllegalViewOperationException(
"Missing animation for property : " + mAnimatedProperty);
}
}
throw new IllegalViewOperationException("Missing animated property from animation config");
}
}