非常に単純なアルファアニメーションを実行したいのですが、有効な方法が見つかりません。
考え方は、ビュー上でこのアニメーションを実行することです:
私はAnimationSetでそれを実装しようとしました:
AnimationSet animationSet = new AnimationSet(true);
Animation animation1 = new AnimationUtils.loadAnimation(this, Android.R.anim.fade_in);
animation1.setDuration(1000);
Animation animation2 = new AnimationUtils.loadAnimation(this, Android.R.anim.fade_out);
animation2.setDuration(1000);
animation2.setStartOffset(5000);
Animation animation3 = new AlphaAnimation(0.0f, 0.0f);
animation3.setDuration(4000)
animation3.setStartOffset(6000);
animationSet.add(animation1);
animationSet.add(animation2);
animationSet.add(animation3);
等..
しかし、3番目のアニメーションがすべてのアルファアニメーションを混乱させることは継ぎ目です。これにより、Androidこのタイプのアニメーションを管理する方法で内部の一貫性が失われると思います。
何か案が?
ありがとうございました。
これを解決するために、これら2つの点に留意してください
1秒のアニメーション期間で5秒後に_1.0f to 0.0f
_をアニメーション化する場合、これは最終的には5秒のポーズで1秒のアニメーションになります。
これを実現するには:
setDuration(1000)
(期間は1秒です)setStartOffset(5000)
(5秒後に開始します)永遠にループする2つのアニメーションのみが必要です。
1 ._0.0f to 1.0f
_一時停止5秒、持続時間1秒
2 ._1.0f to 0.0f
_ポーズが5秒、持続時間が1秒
そして、ここにコードがあります:
_ animation1 = new AlphaAnimation(0.0f, 1.0f);
animation1.setDuration(1000);
animation1.setStartOffset(5000);
animation2 = new AlphaAnimation(1.0f, 0.0f);
animation2.setDuration(1000);
animation2.setStartOffset(5000);
textView.startAnimation(animation1);
_
ただし、繰り返しカウントするにはバグがあるため、永久にループするにはAnimationListener
を使用します。
_ animation1 = new AlphaAnimation(0.0f, 1.0f);
animation1.setDuration(1000);
animation1.setStartOffset(5000);
//animation1 AnimationListener
animation1.setAnimationListener(new AnimationListener(){
@Override
public void onAnimationEnd(Animation arg0) {
// start animation2 when animation1 ends (continue)
textView.startAnimation(animation2);
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
});
animation2 = new AlphaAnimation(1.0f, 0.0f);
animation2.setDuration(1000);
animation2.setStartOffset(5000);
//animation2 AnimationListener
animation2.setAnimationListener(new AnimationListener(){
@Override
public void onAnimationEnd(Animation arg0) {
// start animation1 when animation2 ends (repeat)
textView.startAnimation(animation1);
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
});
textView.startAnimation(animation1);
_
これにはもっと簡単な解決策があります。
ビューがGONE状態にあると仮定しましょう。可視性をアニメーション化するには:
yourView.setVisibility(View.VISIBLE);
yourView.animate().alpha(1).setDuration(300);
同じ方法で、アニメーションリスナーを追加できます。
これは、スケールアニメーションと翻訳アニメーションでも機能します。