web-dev-qa-db-ja.com

Androidアルファが最初はゼロの場合、アニメーション化しません

Androidビューのalphaをアニメーション化しようとしています(2つのアニメーション、両方ともフェードインとフェードアウト)。ビューのアルファが最初は1である場合、デフォルトですべて正常に動作しますただし、最初はそのビューを透明にしたいので、アルファをゼロに設定しました。

indicatorContainer.setAlpha(0);

現在、アニメーションは機能しません。見えなくなることはありません。その行をコメントアウトすると、ビューは最初は表示されます(これは不要です)が、アニメーションを呼び出すと正常に動作します。私はそれは些細なことですが、明らかにそうではありません。何が悪いのですか?

PDATE:浮動小数点も試しました0f整数の代わりに0setAlphaメソッドに関連するいくつかのAPI変更を読んだ後、私の呼び出しが誤ったオーバーロードを呼び出している可能性があると思いましたが、何も変更されていません。

20
Can Poyrazoğlu

このようなものを試してください:

  mRelativeLayout.setAlpha(0f);
    mRelativeLayout.animate().alpha(1f).setDuration(500).setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            mRelativeLayout.setVisibility(View.VISIBLE);
            //OR
            mRelativeLayout.setAlpha(1f);
        }
    });
12
Nikhil Verma

indicatorContainerImageButtonである同じ問題に直面しました。以下のコードは、この非常に迷惑な問題を修正します...

// XXX: Does not work if just 0. It calls `ImageView#setAlpha(int)` deprecated method.
indicatorContainer.setAlpha(0.0f);
ViewCompat.animate(indicatorContainer).alpha(1);
2
ypresto

より簡単な方法で、以下を試すことができます。

view.animate()。alpha(1).setDuration(ANIMATION_DURATION);

1
Ashlesha Sharma

これはOPには関係ないかもしれませんが、将来誰かを助けるかもしれないので、私はそれを共有したいと思いました。

初期アニメーションの場合、animate().alpha(0.0f)とビューのY軸またはX軸の平行移動の操作を組み合わせたものであることに注意してください(例:animate().translationYBy(500))フェードインする前にこのプロパティをリセットする必要があります( animate().alpha(1.0f)を使用します。

私はこれに遭遇しましたSOポストがアルファを1.0fに戻すのは実際にはまだ機能しているときに失敗していたと思っていましたが、アニメーションが画面外で発生していました。 Y軸の移動をリセットしない(Homer Simpson * doh * moment)。

手軽に、この問題を簡単に解決するには、終了時にアニメーションにAnimatorEndListenerを追加して(上記の@Nikhil Vermaのように)、1行のコードを追加してX/Y軸をリセットできます。翻訳。

私が直面したシナリオでは、アニメーションをフロートさせてフェードアウトさせたいので、それに応じてY軸とアルファを調整しました。フロートしてフェードした後、リスナーを設定してY軸の移動を次のようにリセットします。

 loadingMask.animate().translationYBy(500); //starts animation by moving it down the screen
        loadingMask.animate().alpha(0.0f) //fades out
        .setDuration(1500) //over 1.5s
        .setListener(new AnimatorEndListener() { //when animation completes
            @Override
            public void onAnimationEnd(Animator animation) {
                loadingMask.setTranslationY(0); //reset the y axis translation
            }
        });

これで、アニメーションをもう一度繰り返したい場合は、ビューのアルファを1.0fに設定でき、意図したとおりに機能します。

1
Scott Barbour

これは私がこれをちょっと解決することができた方法です-特にエレガントではありませんが、扱いやすい

  1. ビューを、希望する初期アルファに0.0fまたはそれ以外の方法で設定します。

  2. アニメーションを開始する直前など、ビューの可視性/アルファを増やす(または減らす)必要がある場所でイベントが発生すると、その時点でアルファを更新してから、ビューでアニメーションを実行できます。

アニメーションが繰り返されてもまだ途切れがちですが、このアプローチはアニメーションが繰り返されないシナリオで機能する可能性があります

0
Gene Bo