当我隐藏或显示ActionBar
getActionBar().hide()
或getActionBar().show()
时,操作栏(dis)会以流畅的动画显示。
这个动画完成后有没有办法收到通知?
实施OnLayoutChangeListener
似乎不是一个好选项,因为onLayoutChange()
有时在动画期间也称为,无法确定哪个通话是最后一次也是最后一次。
答案 0 :(得分:1)
您可以使用ActionBar.getHeight()
找出操作栏的高度,当您的布局高度增加许多像素时,您就知道动画已完成。
或者,当ActionBar.getHeight()
返回0时,您知道操作栏已隐藏。
答案 1 :(得分:1)
这个动画完成后有没有办法收到通知?
是的,但你必须使用反射。 ActionBarImpl
uses an Animator
用于监控节目并隐藏动画,因此您可以将自己的AnimatorListener
附加到此Field
并接收回调。
以下是一个例子:
private void monitorActionBarAnimation() {
final ActionBar actionBar = getActionBar();
try {
// Get the Animator used internally
final Class<?> actionBarImpl = actionBar.getClass();
final Field currentAnimField = actionBarImpl.getDeclaredField("mCurrentShowAnim");
// Monitor the animation
final Animator currentAnim = (Animator) currentAnimField.get(actionBar);
currentAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
// Do something
}
});
} catch (final Exception ignored) {
// Nothing to do
}
}
请确保在致电ActionBar.show
或ActionBar.hide
后使用它,因为在这些来电之前尚未初始化。{p}此外,它已在AnimatorListener.onAnimationEnd
中发布,因此您每次都需要调用它。