Fixing bug with workspace drop animation

Change-Id: I4f7682e588730905170fd534a415688ebbf64eea
This commit is contained in:
Adam Cohen
2011-01-10 11:01:49 -08:00
parent 99b6a5b5f7
commit df9de0b121
2 changed files with 9 additions and 10 deletions
+5 -9
View File
@@ -963,14 +963,10 @@ public class CellLayout extends ViewGroup implements Dimmable, VisibilityChanged
if (lp.animateDrop) {
lp.animateDrop = false;
// This call needs to be posted since it results in a requestLayout()
// which shouldn't be called from within a layout pass (can cause a bad
// state of the tree).
post(new Runnable() {
public void run() {
((Workspace) mParent).animateViewIntoPosition(child);
}
});
// This call does not result in a requestLayout(), but at one point did.
// We need to be cautious about any method calls within the layout pass
// to insure we don't leave the view tree in a bad state.
((Workspace) mParent).animateViewIntoPosition(child);
}
}
}
@@ -1392,7 +1388,7 @@ public class CellLayout extends ViewGroup implements Dimmable, VisibilityChanged
lp.isDragging = false;
lp.dropped = true;
lp.animateDrop = animate;
child.setVisibility(View.VISIBLE);
child.setVisibility(View.INVISIBLE);
child.requestLayout();
}
}
+4 -1
View File
@@ -1516,6 +1516,10 @@ public class Workspace extends SmoothPagedView
lp.oldY = viewY - (parent.getTop() - mScrollY);
}
/*
* We should be careful that this method cannot result in any synchronous requestLayout()
* calls, as it is called from onLayout().
*/
public void animateViewIntoPosition(final View view) {
final CellLayout parent = (CellLayout) view.getParent();
final CellLayout.LayoutParams lp = (CellLayout.LayoutParams) view.getLayoutParams();
@@ -1574,7 +1578,6 @@ public class Workspace extends SmoothPagedView
}
});
view.setVisibility(View.INVISIBLE);
mDropAnim.start();
}