2010-07-21 3 views
34

Я хочу сделать очень простую альфа-анимацию, но я не могу найти правильный путь.Android альфа-анимация fadein fadeout с задержками

Идея заключается в том, чтобы выполнить эту анимацию над видом:

  1. альфа от 0 до 1 из 1 второго
  2. удержания альфа на 1 в течение 5 секунд
  3. альфа от 1 до 0 из 1 секунда
  4. удерживайте альфа на 0 в течение 5 секунд.
  5. старт снова на 1.

Я пытался осуществить это с 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); 

и т.д ..

но швы, что третья анимация делают беспорядок со всеми альфа-анимациями, я полагаю, что это вызывает внутреннюю непоследовательность в том, как Android управляет этим типом анимации.

Любая идея?

спасибо.

+0

Не могли бы вы рассказать мне, хорошо ли работает мой код? И, пожалуйста, примите ответ, если да –

ответ

101

Ok Имейте в виду, эти 2 очка, чтобы решить эту


  • Если я хочу, чтобы анимировать 1.0f to 0.0f через 5 секунд с длительностью анимации 1 секунды, это в конечном счете 1 второй анимации с пауза в 5 секунд.

    Чтобы достигнуть этого:

    1. setDuration(1000) (она имеет 1 вторую длительность)
    2. setStartOffset(5000) (она начнет через 5 секунд)

  • Вам нужно всего 2 анимации, которые будут l навсегда.

    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); 
+0

Отличный ответ! Большое спасибо! – David

+0

Хорошо, может ли он использовать, чтобы подождать 5 секунд, а затем показать что-то? для задержки обработчика.post. – mehmet

14

Это более простое решение.

Предположим, что ваше мнение в состоянии GONE. Чтобы оживить его видимость:

yourView.setVisibility(View.VISIBLE); 
yourView.animate().alpha(1).setDuration(300); 

Таким же образом вы можете добавить слушателей анимации.

Это также работает для анимации масштаба и перевода.

+1

Очень хорошо. Благодарю. – paakjis