анимационный слушатель не работает до сотовых устройств

Я хочу применить анимацию к представлению и показать ее, когда анимация закончилась через AnimationListener. Мой код работает для устройств 4.x, но не работает для устройства 2.3.3, методы onAnimationStart и onAnimationEnd никогда не вызываются.

 final Animation toTopAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.move_up);
 toTopAnimation.setDuration(250);
 toTopAnimation.setFillBefore(true);
 toTopAnimation.setFillAfter(true);

 toTopAnimation.setAnimationListener(new AnimationListener() {
     @Override
     public void onAnimationStart(Animation animation) {
          Log.i("log", "onAnimationStart");
     }
     @Override
     public void onAnimationEnd(Animation animation) {
         Log.i("log", "onAnimationEnd");
         mQuickReturnView.setVisibility (View.VISIBLE);
     }

     @Override
     public void onAnimationRepeat(Animation animation) {
     }
 });

  mQuickReturnView.setAnimation(toTopAnimation);
  mQuickReturnView.startAnimation(toTopAnimation);

Вы видите что-то не так?

Спасибо


person nirvik    schedule 25.06.2013    source источник
comment
Фрагмент выглядит хорошо, и он должен работать и на устройствах с предварительным сотовым соединением. Имо проблема решается везде   -  person Blackbelt    schedule 25.06.2013


Ответы (1)


У меня была аналогичная проблема, и мне удалось ее решить. Я до сих пор не совсем уверен, в чем причина этой проблемы, но она кроется где-то в содержании представления и в том, как имбирный пряник обрабатывает свое рисование.

В моем случае у меня был RelativeLayout, в котором было несколько просмотров. Анимация будет работать только в том случае, если я изменю некоторое значение дочернего представления в моем RelativeLayout перед вызовом анимации. Например, у меня внутри был TextView, поэтому я вызывал метод setText(). Может быть, вам тоже стоит попробовать:

// ---
mQuickReturnView.setAnimation(toTopAnimation);
someViewInsidemQuickReturnView.setText(getResources().getString(R.string.some_string));
mQuickReturnView.startAnimation(toTopAnimation);
// ---

Метод setText() каким-то образом обновляет представление, и после этого анимация работает нормально.

person Egor Neliuba    schedule 25.06.2013
comment
Спасибо, setText() у меня не сработал, но проблема была похожей. В моем случае я решил это, скрыв некоторый контент в макете. - person nirvik; 26.06.2013