Ответ 1
Я также обнаружил, что при удалении представления из его родителя после применения анимации к этому представлению (с использованием onAnimationEnd) происходит сбой с NPE на dispatchDraw родителя.
Единственное, что я нашел, это вызвать удаление внутри почтового вызова. Обычно все изменения пользовательского интерфейса должны выполняться в потоке пользовательского интерфейса, поэтому я добавил вызов runOnUiThread для активности, но он может быть бесполезным (он работает для меня без этого).
Animation animation = AnimationUtils.loadAnimation(parentView.getContext(), animationId);
animation.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation paramAnimation) { }
public void onAnimationRepeat(Animation paramAnimation) { }
public void onAnimationEnd(Animation paramAnimation) {
// without the post method, the main UI crashes if the view is removed
parentView.post(new Runnable() {
public void run() {
// it works without the runOnUiThread, but all UI updates must
// be done on the UI thread
activity.runOnUiThread(new Runnable() {
public void run() {
parentView.removeView(view);
}
});
}
});
}
});
view.setVisibility(visibility());
view.startAnimation(animation);