2014-09-17 5 views
2

Я пытаюсь простой пример, как с TextView и перевести его от 0% до 100% от ширины экранаДобавить задержку перед повторной анимации с valueAnimator

код:

anim0 = ObjectAnimator.ofFloat(textViewId00, "translationX", -120f, 480f); 

где 480 ° F это ширина моего экрана.

Что я хочу, это следующее N раз (n = 5 для моего примера), чтобы добавить задержку до ее начала.

Я попытался добавить задержку с помощью метода setStartDelay() на onAnimationRepeat, но эффекта нет.

Мой код:

 textViewId00 = (TextView) findViewById(R.id.textViewId00); 


    anim0 = ObjectAnimator.ofFloat(textViewId00, "translationX", -120f, 480f); 
    anim0.setDuration(2000); 
    anim0.setRepeatCount(5); 
    anim0.addListener(new Animator.AnimatorListener() { 
     @Override 
     public void onAnimationStart(Animator animation) { 
      Log.i(TAG, "anim0 onAnimationStart "); 
      textViewId00.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public void onAnimationEnd(Animator animation) { 
      Log.i(TAG, "anim0 onAnimationEND "); 
     } 

     @Override 
     public void onAnimationCancel(Animator animation) { 

     } 

     @Override 
     public void onAnimationRepeat(Animator animation) { 
      Log.i(TAG, "anim0 onAnimation REPEAT "); 
      anim0.setStartDelay(14000); 
     } 
    }); 
    anim0.start(); 

TextView появляется на экране, перемещается до тех пор, пока не исчезнет, ​​а затем снова от начала без каких-либо задержек.

+1

Не могли бы вы установить анимацию не повторять и добавить anim0.start() внутри onAnimationEnd слушателя, возможно? – daentech

+0

Тогда он не войдет в 'onAnimationRepeat'. Просто попробовал, и ничего не происходит. – vicolored

+0

Вы хотите, чтобы анимировать с экрана, приостановить, вернуться в исходное положение после задержки и оживить снова? – daentech

ответ

2

Я просто попытался его с помощью этого кода, и это выглядит, как он делает то, что вы хотите, чтобы:

public void animateView() { 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 

    final int screenWidth = size.x; 

    final ObjectAnimator anim0 = ObjectAnimator.ofFloat(textviewId00, "translationX", -120f, screenWidth); 
    anim0.setDuration(2000); 
    anim0.addListener(new Animator.AnimatorListener() { 

     int count; 

     @Override 
     public void onAnimationStart(Animator animation) { 
      textViewId00.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public void onAnimationEnd(Animator animation) { 
      if (++count < 5) { 
       anim0.setStartDelay(14000); 
       anim0.start(); 
      } 
     } 

     @Override 
     public void onAnimationCancel(Animator animation) {} 

     @Override 
     public void onAnimationRepeat(Animator animation) {} 
    }); 
    anim0.start(); 
} 
+0

Он работает !! Спасибо. Хотя я не могу понять, что не так с моим подходом. – vicolored

+0

Предположим, я хочу повторить анимацию сразу после этого, навсегда, что мне делать в onAnimationEnd? –

Смежные вопросы