使用ListView动画工具栏

时间:2015-05-02 23:27:47

标签: java android listview toolbar

目前我下面有一个Toolbar和一个ListView。我想让我的内容更加身临其境,我希望通过在滚动ListView时将工具栏向上滚出屏幕,就像Google Play商店的顶级图表视图一样。我在滚动列表时使用https://github.com/ksoichiro/Android-ObservableScrollView来获取,但现在我的问题是如何在滚动列表时翻译工具栏?我不想使用onUpOrCancelMotionEvent()方法,因为这只是在用户松开他/她的手指时触发,而不是在我滚动时触发。到目前为止我得到的代码:

lv.setScrollViewCallbacks(new ObservableScrollViewCallbacks() {
        int last = -1;

        @Override
        public void onScrollChanged(int i, boolean b, boolean b2) {
            if (b2) {
                if (last == -1) {
                    last = i;
                } else {
                    int dy = i - last;

                    if(toolbar.getY() > -TOOLBAR_HEIGHT && dy > 0) {
                        if(toolbar.getY() - dy < -TOOLBAR_HEIGHT)
                            toolbar.setY(-TOOLBAR_HEIGHT);
                        else
                            toolbar.setY(toolbar.getY() - dy);

                        tabs.setY(toolbar.getY() + TOOLBAR_HEIGHT);
                    }else if(toolbar.getY() < 0 && dy < 0) {
                        if (toolbar.getY() - dy > 0)
                            toolbar.setY(0);
                        else
                            toolbar.setY(toolbar.getY() - dy);

                        tabs.setY(toolbar.getY() + TOOLBAR_HEIGHT);
                    }

                    last = i;
                }
            }
        }
        ...
}

现在这样可行,但是在原始工具栏的位置呈现了一个白色矩形,如下所示:http://i.imgur.com/akY7hly.gif(它是一个gif)。

如何使用listview为工具栏设置动画/正确翻译工具栏?

1 个答案:

答案 0 :(得分:1)

这就是我的意思,当它滚动的时间

Animation anim = AnimationUtils.loadAnimation(
                            getBaseContext(), R.anim.push_up_out)
yourtoolbar.startAnimation(anim);

记得在你的动画上设置一个监听器并将Visibility设置为GONE 即清除屏幕空间,但动画上的alpha会使它消失但填充空间

这是 R.anim.push_up_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
    android:duration="600"
    android:fromYDelta="0"
    android:toYDelta="-100%p" />

<alpha
    android:duration="600"
    android:fromAlpha="1.0"
    android:toAlpha="0.0" />

</set>