2014-09-26 128 views
1

我想实现视图隐藏的滚动的列表视图。相对于在android中滚动的listview滑动视图?

像Facebook应用程序: -

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

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; 

     } 

使用此代码,该视图幻灯片但它不光滑。

+0

你试过加1而不是20吗? – 2014-09-26 10:45:46

+0

1翻译非常慢。当我在Facebook上滚动时,它非常流畅,通过滚动Feed只需稍微仰视即可快速上下移动 – 2014-09-26 10:47:05

回答

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)); 
     } 
    });