Это не вопрос, скорее как разделение с другими проблемы, с которой я столкнулся, и как я ее разрешил.
В принципе, я пытался создать ViewAnimator, который создавал бы дополнительные дочерние элементы в ответ на клики пользователей.
Для очистки после того, как я анимированный следующий вид, я поставилViewAnimator's OnDraw выбрасывает исключение NullPointerException, если вы удаляете дочерний элемент on onAnimationEnd
outAnimation.setAnimationListener(listener);
и в AnimationListener
public void onAnimationEnd(Animation animation) {
viewAnimator.removeView(out);
}
Теперь проблема с выше подхода, сразу же после того, как onAnimationEnd, она бросает NullPointerException , В принципе, это означает, что ViewAnimator все еще использует дочернее представление, которое анимируется для рисования. Так как я удалил его, там есть null. Я сделал свое исследование, и в основном, похоже, это известная ошибка. См.: Android Animation is not finished on onAnimationEnd
Чтобы решить эту проблему, я изменил макет.
<ViewAnimator
android:id="@+id/animator"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="@+id/container1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</FrameLayout>
<FrameLayout
android:id="@+id/container2"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</FrameLayout>
</ViewAnimator>
и onAnimationEnd я могу смело назвать container.removeAllViews()
. Чтобы анимировать новый вид, я выбираю скрытый контейнер и
container.addView(newView);
animator.setDisplayedChild(animator.indexOfChild(container));
Я буду рад видеть ваши комментарии и советы.
Я попробовать подобный подход, 'postDelayed (Runnable задачи, внутр delayMillis) .' В моем случае это вызвало неодушевленность снова по какой-то странной причине. –