6

是否可以随着时间的推移对图像(例如 png)的饱和度进行动画处理?例如从灰度到全彩。另外,如果我可以使用插值器。

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

例如在 a 上应用灰度饱和度Drawable drawable

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

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

并在以后完全饱和:

matrix.setSaturation(1);

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

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

2 回答 2

11

它当然可以通过 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();
于 2014-08-23T13:34:18.387 回答
0

您必须自己制作动画!

不应该那么难。

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

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

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

invalidate()您可以通过每隔几毫秒调用一次来获得动画onDraw。确保通过使线程进入睡眠状态来减慢迭代速度。Thread.sleep(40);25 帧/秒

于 2014-08-23T13:27:00.107 回答