Android-анимация fadein с задержками

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

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

  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 управляет этим типом анимации.

Есть идеи?

Спасибо.

Solutions Collecting From Web of "Android-анимация fadein с задержками"

Хорошо Имейте в виду эти 2 пункта, чтобы решить эту проблему.


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

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

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

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

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

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

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