动画图像饱和度

时间:2014-08-22 18:20:01

标签: android android-animation android-image android-transitions

是否可以随时间设置图像饱和度(例如png)?例如,从灰度到全彩。如果我可以使用插补器,还可以。

我已经看过EffectFactory和ColorMatrix类,但是我无法将它们与动画/过渡结合起来。

E.g。在Drawable drawable上应用灰度饱和度:

ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);

ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
drawable.setColorFilter(filter);

以后完全饱和:

matrix.setSaturation(1);

对于任何对基于Simon的回答感兴趣的完整解决方案:

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();

2 个答案:

答案 0 :(得分:10)

使用ValueAnimator肯定可以实现:

ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.addUpdateListener(new AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        matrix.setSaturation(animation.getAnimatedFraction());
    }
});
animation.start();

答案 1 :(得分:0)

你必须自己设置动画!

不应该那么难。

请参阅API演示文件夹中的ColorMatrix示例。

http://alvinalexander.com/java/jwarehouse/android-examples/platforms/android-2/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.java.shtml

您可以扩展Drawable并在onDraw方法中增加一个值,然后相应地设置过滤器。

您可以在invalidate()中每隔几毫秒调用onDraw来获取动画。一定要通过让线程进入休眠状态来减慢迭代速度。 Thread.sleep(40); 25 fps