在getActionBar()触发的动画结束时收到通知.hide()& getActionBar()。节目()

时间:2014-05-08 09:25:54

标签: android android-actionbar android-animation show-hide

当我隐藏或显示ActionBar getActionBar().hide()getActionBar().show()时,操作栏(dis)会以流畅的动画显示。

这个动画完成后有没有办法收到通知?

实施OnLayoutChangeListener似乎不是一个好选项,因为onLayoutChange()有时在动画期间也称为,无法确定哪个通话是最后一次也是最后一次。

2 个答案:

答案 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.showActionBar.hide后使用它,因为在这些来电之前尚未初始化。{p}此外,它已在AnimatorListener.onAnimationEnd中发布,因此您每次都需要调用它。