How to animate gradient from color#1 to color#2? Something similar to
I\'m planning to use it as health-bar for unit (so, it will be finit animation starting
just rewrited @Krzysztof Misztal's answer to java :
public static void startAnimation(final int view, final Activity activity) {
final int start = Color.parseColor("#FDB72B");
final int mid = Color.parseColor("#88FDB72B");
final int end = Color.TRANSPARENT;
final ArgbEvaluator evaluator = new ArgbEvaluator();
View preloader = activity.findViewById(R.id.gradientPreloaderView);
preloader.setVisibility(View.VISIBLE);
final GradientDrawable gradient = (GradientDrawable) preloader.getBackground();
ValueAnimator animator = TimeAnimator.ofFloat(0.0f, 1.0f);
animator.setDuration(500);
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
Float fraction = valueAnimator.getAnimatedFraction();
int newStrat = (int) evaluator.evaluate(fraction, start, end);
int newMid = (int) evaluator.evaluate(fraction, mid, start);
int newEnd = (int) evaluator.evaluate(fraction, end, mid);
int[] newArray = {newStrat, newMid, newEnd};
gradient.setColors(newArray);
}
});
animator.start();
}
public static void stopAnimation(final int view, final Activity activity){
ObjectAnimator.ofFloat(activity.findViewById(view), "alpha", 0f).setDuration(125).start();
}
where the view is a simple View with gradient background:
//gradient_preloader
the view :
hope my answer will help