6

時間の経過とともに画像 (png など) の彩度をアニメーション化することは可能ですか? たとえば、グレースケールからフルカラーまで。さらに、補間器を使用できる場合。

EffectFactory と ColorMatrix クラスを見てきましたが、それらをアニメーション/トランジションと組み合わせることができません。

例: にグレースケール彩度を適用する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 の demos フォルダーにある例を参照してください。

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 fps の場合

于 2014-08-23T13:27:00.107 に答える