Дождитесь окончания анимации другого вида

У меня есть следующий фрагмент макета:

<LinearLayout android:id="@+id/tagContainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:animateLayoutChanges="true" > </LinearLayout> <TextView android:id="@+id/commentLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tagContainer" /> 

Как вы можете видеть, animateLayoutChanges установлен на true в LinearLayout , поэтому, когда элемент добавляется к нему, он оживляет добавление. Это нормально, но есть проблемы с удалением. Если я удалю элемент, анимация по-прежнему будет хорошо работать, но TextView внизу появится сразу и не дожидается завершения анимации. Как я могу достичь этого, или даже лучше, сделать анимацию TextView синхронизированной с анимацией LinearLayout ?

Вы можете получить LayoutTransition из представления следующим образом:

 mLinearLayout = findViewById(R.id.myLayout); LayoutTransition layoutTransition = mLinearLayout.getLayoutTransition(); layoutTransition.addTransitionListener(new TransitionListener(){ @Override public void endTransition(LayoutTransition arg0, ViewGroup arg1, View arg2, int arg3) { switch(arg2.getId()){ //.... } } @Override public void startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) { switch(view.getId()){ //.... } }}); 

Это не ответ, а готовый к использованию фрагмент кода, который вы можете попытаться проверить, что происходит.

 mContainer = (ViewGroup) v.findViewById(R.id.container); if (Build.VERSION.SDK_INT >= 11) { mLayoutTransition = mContainer.getLayoutTransition(); if (mLayoutTransition != null) { mLayoutTransition.addTransitionListener(new LayoutTransition.TransitionListener() { @Override public void startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) { Log.d("\n\n startTransition: in "+container+" view "+view+" type "+ descr(transitionType)); } @Override public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) { Log.d("\n\n endTransition: in "+container+" view "+view+" type "+ descr(transitionType)); } String descr(int transitionType) { String[] m = new String[]{"CHANGE_APPEARING","CHANGE_DISAPPEARING","APPEARING","DISAPPEARING"}; return "" + transitionType + ": " + m[transitionType&3] + " changing="+( transitionType&LayoutTransition.CHANGING); } }); } } 

Для меня контейнер представляет собой LinearLayout и интерес представляет интерес:

 public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) { // UI thread if (transitionType == LayoutTransition.DISAPPEARING) { // start 2nd animation, it will be done while another view is moved } }