// 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.Transformation;
/**
* Animation responsible for updating opacity of a view. It should ideally use hardware texture
* to optimize rendering performances.
*/
/* package */ class OpacityAnimation extends Animation {
static class OpacityAnimationListener implements AnimationListener {
private final View mView;
private boolean mLayerTypeChanged = false;
public OpacityAnimationListener(View view) {
mView = view;
}
@Override
public void onAnimationStart(Animation animation) {
if (mView.hasOverlappingRendering() &&
mView.getLayerType() == View.LAYER_TYPE_NONE) {
mLayerTypeChanged = true;
mView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
}
@Override
public void onAnimationEnd(Animation animation) {
if (mLayerTypeChanged) {
mView.setLayerType(View.LAYER_TYPE_NONE, null);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
// do nothing
}
}
private final View mView;
private final float mStartOpacity, mDeltaOpacity;
public OpacityAnimation(View view, float startOpacity, float endOpacity) {
mView = view;
mStartOpacity = startOpacity;
mDeltaOpacity = endOpacity - startOpacity;
setAnimationListener(new OpacityAnimationListener(view));
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
mView.setAlpha(mStartOpacity + mDeltaOpacity * interpolatedTime);
}
@Override
public boolean willChangeBounds() {
return false;
}
}