Is it possible to animate an image saturation (e.g. png) over time? For example, from shades of gray to full color. Plus, if I can use Interpolator.
I have seen EffectFactory and ColorMatrix classes, but I cannot combine them with animation / transition.
eg. applying the grayscale saturation on the Drawable drawable :
ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); drawable.setColorFilter(filter);
and for full saturation later:
matrix.setSaturation(1);
For anyone interested in my complete solution based on Simon's answer:
final ColorMatrix matrix = new ColorMatrix(); final Drawable drawable = ... ; ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f); animation.setDuration(1000); // animation.setInterpolator(); animation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { matrix.setSaturation(animation.getAnimatedFraction()); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); drawable.setColorFilter(filter); } }); animation.start();
source share