Android Альфа-анимация fadein fadeout с задержками
Я хочу сделать очень простой Альфа-анимацию, но я не могу найти правильный путь.
идея состоит в том, чтобы выполнить эту анимацию над видом:
- альфа от 0 до 1 от 1 секунды
- удерживайте Альфа на 1 в течение 5 секунд
- альфа от 1 до 0 1 секунды
- удерживайте Альфа на 0 в течение 5 секунд.
- начните снова на 1.
Я попытался реализовать это с помощью AnimationSet as:
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);
etc..
но это швы, что третья анимация делает беспорядок со всеми Альфа-анимациями, я предполагаю, что это вызывает внутреннюю непоследовательность в том, как Android управляет этим типом анимации.
есть идеи?
спасибо.
2 ответов
Ok имейте в виду эти 2 пункта, чтобы решить эту проблему
-
если я хочу анимировать
1.0f to 0.0f
после 5 секунд с продолжительностью анимации 1 секунды, это в конечном счете 1 секундная анимация с паузой 5 секунд.чтобы добиться этого:
-
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
потому что repeatCount глючит:
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);
таким же образом вы можете добавить слушателей анимации.
Это также работает для анимации масштаба и перевода.