I have the following layout snippet:
<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" />
As you can see, animateLayoutChanges is set to true on the LinearLayout, so when an item is added to it, it animates the addition. This ok, but there are problems with the removal. If i remove an item, the animation still plays well, but the TextView below pops up immediately and does not wait for the animation to finish. How can i achieve this, or even better, make the TextView animate up synchronized with the LinearLayout animation?
You can retrieve the LayoutTransition from the view in following way:
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()){
//....
}
}});
This is not an answer but a ready-to use code snippet that you may try to examine what is happening.
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);
}
});
}
}
For me, the container view is a LinearLayout and the event of interest is:
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
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With