4

さまざまなシナリオで実行されているアニメーションが混在しています。例として;

小さな円のビットマップにフェードインとフェードアウトのアニメーターがあります。should start と onで、ACTION_DOWNフェードインが終了すると、フェードアウトが実行されます。ただし、ユーザーがフェードインが終了する前に指を離すと、指はそこで停止し ( )、フェードアウトはそのアルファ値から開始する必要があります。毎回新しいオブジェクトアニメーターは必要ありません。コンストラクターでこのようなアニメーターを定義しましたfade-inACTION_UPfadein.cancel()

    fadein = Objectanimator.ofFloat(bitmap, "alpha", 1.0f);
    fadeOut = Objectanimator.ofFloat(bitmap, "alpha", 0.0f);

何が起こるかというと、前述のように (指をすばやく持ち上げる) 問題を発生させると、フェードアウト アニメーターはフェードインが中断された場所のアルファ値を取得し、それを保持します。つまり、2 回目以降は新しいアルファを取得しません! 何故ですか?回避策は何ですか?毎回新しいオブジェクトを作成しますか?

4

1 に答える 1

3

ObjectAnimatorクラスはビューの属性を変更するため、Object プロパティの setter メソッドを使用してビューのプロパティを更新します (公式の Android ガイドに従って)。

したがって、fadeinアニメーションが実行されると、アルファ値は常に変更され、fadein.cancel()実行されると、ビューのアルファ値は更新を停止します。この値が であるとしましょうX

したがって、 を開始するfadeOutと、 から にアニメーション化さX0.0fます。

回避策は何ですか?

の場合、開始値と終了値を意味する 2 つの値をfadeOut使用します

fadeOut = Objectanimator.ofFloat(bitmap, "alpha", 1.0f, 0.0f);
于 2013-11-20T10:10:58.410 に答える