AnimationにおけるfillAfter,fillBefore,fillEnabledの理解
4367 ワード
Animation
Animationは抽象クラスであり,その直接サブクラスにはAlphaAnimation,ScaleAnimation,RotateAnimation,TranslateAnimation,AnimationSetがある.
Animationが持つ属性は以下のとおりです.
本文は主にfillAfter、fillBefore、fillEnabledの3つの関係を話して、実は上はすでにはっきり言って、もし表現がはっきりしないならば、また指摘して、ありがとうございます.結論はすでに出ていて、慣例に従って、やはり例をあげて、印象を深めます.以下、上記の結論を2つの例で証明します.ルートノードは単一のアニメーションで、ルートノードは結合アニメーションです.
ScaleAnimation
Javaコードで任意のビューオブジェクトをインスタンス化します.私のビューオブジェクトtargetViewは、次のようになります.
オフセットの時間量は3秒、つまりアニメーションが本格的に始まる時間はstartAnimationメソッドを呼び出す3秒後です.そして3秒の間、Viewはどのような状態なのか、例ではfillEnabledがtrueであることがわかりますので、fillBeforeは有効であり、fillBeforeはfalseなので、最終的に実行した結果、loadAnimationが呼び出された後、ViewはView自体の初期サイズを2倍に拡大することなく、3秒続くとすぐに元の2倍になります.その後、アニメーションを開始し、徐々に元の3倍に変更し、初期サイズに戻り、アニメーションを停止します.
ここではfillAfterは設定されていませんが、fillAfterは実際にfillBeforeやfillEnabledとは何の関係もありません.fillAfterのデフォルト値はfalseなので、アニメーションが終了すると元のサイズに戻ります.
FillBefore、fillEnabledはいったいどこで使われているのか、次の例を見てみましょう
AnimationSet
コンビネーションアニメーションでは、fillBefore、fillEnabledを設定することで、あなたが望む効果を保証することができます.
なお、Animationソースコードでは、fillAfterのデフォルト値がfalse、fillBeforeのデフォルト値がtrue、fillEnabledのデフォルト値がfalseであることがわかります.これらの値を設定しない場合は、デフォルトです.fillEnabledがfalseの場合、fillBeforeの値はどうでもいいですが、fillBeforeがtrueであると仮定します.だから
目的の効果を達成するには、fillEnabled、fillEnabledを設定することで実現できます.ビューは、まず元の位置で0.5倍から2倍に拡大し、つまりこのときビューの初期状態が90度回転できない場合、
まとめてみると、
通常、
Animationは抽象クラスであり,その直接サブクラスにはAlphaAnimation,ScaleAnimation,RotateAnimation,TranslateAnimation,AnimationSetがある.
Animationが持つ属性は以下のとおりです.
android:duration ,
android:fillAfter , true, , , false
android:fillBefore ,View ; startAnimation , 。 startAnimation , startOffset ,
fillBefore true, startOffset , ,
false, View 。
android:fillEnabled fillBefore , true, fillBefore ; false
fillBefore true false, 。 , ,
fillEnabled false , fillBefore true。 , fillEnabled false , fillBefore , startOffset
。
android:repeatCount
android:repeatMode , reverse restart ,reverse ,restart , repeatCount 。 , 。
android:interpolator , , 。
本文は主にfillAfter、fillBefore、fillEnabledの3つの関係を話して、実は上はすでにはっきり言って、もし表現がはっきりしないならば、また指摘して、ありがとうございます.結論はすでに出ていて、慣例に従って、やはり例をあげて、印象を深めます.以下、上記の結論を2つの例で証明します.ルートノードは単一のアニメーションで、ルートノードは結合アニメーションです.
ScaleAnimation
src/main/res/anim/scaleanim.xml
Javaコードで任意のビューオブジェクトをインスタンス化します.私のビューオブジェクトtargetViewは、次のようになります.
Animation animation = AnimationUtils.loadAnimation(context,R.anim.scaleanim);
targetView.startAnimation(animation);
オフセットの時間量は3秒、つまりアニメーションが本格的に始まる時間はstartAnimationメソッドを呼び出す3秒後です.そして3秒の間、Viewはどのような状態なのか、例ではfillEnabledがtrueであることがわかりますので、fillBeforeは有効であり、fillBeforeはfalseなので、最終的に実行した結果、loadAnimationが呼び出された後、ViewはView自体の初期サイズを2倍に拡大することなく、3秒続くとすぐに元の2倍になります.その後、アニメーションを開始し、徐々に元の3倍に変更し、初期サイズに戻り、アニメーションを停止します.
ここではfillAfterは設定されていませんが、fillAfterは実際にfillBeforeやfillEnabledとは何の関係もありません.fillAfterのデフォルト値はfalseなので、アニメーションが終了すると元のサイズに戻ります.
FillBefore、fillEnabledはいったいどこで使われているのか、次の例を見てみましょう
AnimationSet
コンビネーションアニメーションでは、fillBefore、fillEnabledを設定することで、あなたが望む効果を保証することができます.
View 0.5 2 , 90 720
が必要です.どうすればいいですか.上のfillEnabled、fillBeforeを削除すると、アニメーションはどのような効果がありますか?なお、Animationソースコードでは、fillAfterのデフォルト値がfalse、fillBeforeのデフォルト値がtrue、fillEnabledのデフォルト値がfalseであることがわかります.これらの値を設定しない場合は、デフォルトです.fillEnabledがfalseの場合、fillBeforeの値はどうでもいいですが、fillBeforeがtrueであると仮定します.だから
fillBefore,fillEnabled
の結果は: View 90 , View , 1 View 2 , , 2 720 , View
です.目的の効果を達成するには、fillEnabled、fillEnabledを設定することで実現できます.ビューは、まず元の位置で0.5倍から2倍に拡大し、つまりこのときビューの初期状態が90度回転できない場合、
rotate
ラベルの中でfillEnabledをtrueに設定します.fillBefore、fillAfterはsetラベルに設定されているからです.View 0.5 2
は、ビューの初期サイズがビュー自体のサイズの0.5倍であることを示す.したがって、fillEnabledをfalseに設定します.fillEnabledがfalseであるため、fillEnabledはfillEnabledに相当し、fillBeforeは同時にtrueの効果です.まとめてみると、
fillEnabled false、fillBefore any
はfillEnabled true fillBefore true
に相当します.通常、
set
のラベルでfillBeforeをfalseに設定し、アニメーションノードでfillEnabledを設定してstartOffsetフェーズで所定の初期値が使用されるかどうかを決定します.