onAnimationEnd не вызывается, onAnimationStart работает нормально - PullRequest
43 голосов
/ 29 марта 2011

У меня есть ScrollView в PopupWindow. Я анимирую содержимое ScrollView с помощью TranslateAnimation.

Когда анимация запускается, вызывается прослушиватель onAnimationStart, но onAnimationEnd не вызывается. Есть идеи?

Макет:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:background="@drawable/popup_window_bg"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
  <View
     android:layout_width="@dimen/toolbar_padding_left"
     android:layout_height="@dimen/toolbar_height"/>
  <ScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+web/toolbar"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:scrollbars="none"
     android:visibility="invisible">
    <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical">

       ...

    </LinearLayout>
  </ScrollView>
</LinearLayout>

Код анимации:

mToolbar = mPopupContents.findViewById( R.web.toolbar );
TranslateAnimation anim =
    new TranslateAnimation(0, 0, -60, 0);
anim.setDuration(1000);
anim.setAnimationListener(new Animation.AnimationListener() {
        public void onAnimationStart(Animation a) {
            Log.d(LOGTAG, "---- animation start listener called"  );
        }
        public void onAnimationRepeat(Animation a) {}
        public void onAnimationEnd(Animation a) {
            Log.d(LOGTAG, "---- animation end listener called"  );
        }
    });
mToolbar.startAnimation(anim);

Обновление : я проверил, что onAnimationEnd вызывается, но вызывается после некоторой задержки (при условии, что вы не запускаете новую анимацию в это время).

Ответы [ 14 ]

0 голосов
/ 29 августа 2011

Задержка, вероятно, из-за anim.setDuration (1000) или если вы делаете это в потоке, то, вероятно, из-за переключения контекста. Попробуйте изменить время задержки и посмотрите, заметите ли вы разницу.

0 голосов
/ 27 июня 2011

Я полагаю, что его вызывают через некоторое время, потому что вы используете setDuration для анимации и пропускаете 1000 мс.Просто пройдите 0, и вам не понадобится время, чтобы вам позвонили.

0 голосов
/ 07 апреля 2011

Где вы начинаете свою анимацию? Если в onCreate, это неправильно. Попробуйте сделать это в onResume.

0 голосов
/ 06 апреля 2011

Разве вы не устанавливаете другую анимацию до того, как закончится та, которую вы ждете?

Без контекста трудно понять, если это что-то подобное ... но это, вероятно, одна из тех причин, которые вызвали бы ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...