相对于在android中滚动的listview滑动视图?

时间:2014-09-26 10:38:17

标签: android listview

我正在尝试实现关于滚动列表视图的隐藏视图。

喜欢facebook app: -

1.)当列表视图向下滚动时,底部的蓝色布局(状态,照片,CheckIn)开始相对于滚动列表视图的数量向上滑动,最终变为可见

2.)当列表视图向上滚动时,底部布局向下滑动,最后不可见。

3.)当列表同时上下滚动时,布局也相对于它向下和向下滑动

现在,我正在努力通过翻译实现它,但结果并不完全相同: -

public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {

            final int currentFirstVisibleItem = view.getFirstVisiblePosition();

            if (currentFirstVisibleItem > mLastFirstVisibleItem) {
                // Scroll down
                count = count + 20;
            } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
                // Scroll up
                count = count - 20;

            }
            bottom.setTranslationY(count);
            mLastFirstVisibleItem = currentFirstVisibleItem;

        }

使用此代码,视图会滑动但不平滑。

1 个答案:

答案 0 :(得分:0)

我在我的应用程序中做了类似的事情。除了我不滚动底部而是滚动tabhost。也许你可以从这里拿出一些代码给你。

    listView.setOnScrollListener(new AbsListView.OnScrollListener()
    {
        @Override
        public void onScrollStateChanged(AbsListView absListView, int i)
        {
            if (i == SCROLL_STATE_IDLE)
            {
                mLastScroll = 0;
                if (mTabHost.getTranslationY() >= -mTabHost.getHeight() / 2)
                    mTabHost.animate().translationY(0).start();
                else
                    mTabHost.animate().translationY(-mTabHost.getHeight()).start();
            }
        }

        @Override
        public void onScroll(AbsListView absListView, int i, int i2, int i3)
        {
            if (absListView.getChildCount() <= 0)
                return;
            View c = absListView.getChildAt(0);
            int scrolly = -c.getTop() + absListView.getFirstVisiblePosition() * c.getHeight();
            if (mLastScroll == 0)
                mLastScroll = (int)(scrolly + Math.round(mTabHost.getTranslationY() / 0.7));
            float dif = 0;
            if (mLastScroll - scrolly <= 0)
                dif = mLastScroll - scrolly;
            else
                mLastScroll = scrolly;

            if (dif * 0.7 < -mTabHost.getHeight())
            {
                dif = Math.round(-mTabHost.getHeight() / 0.7);
                mLastScroll = (int) Math.round(scrolly - mTabHost.getHeight() / 0.7);
            }
            mTabHost.setTranslationY(Math.round(dif * 0.7));
        }
    });