Android:使ListView顶部的视图与列表视图一起滚动

我有一个显然可以滚动的列表视图。 列表视图包含一些表单问题。 一旦用户提交表单,我们会在列表视图的顶部添加一个类似邮票的自定义视图(并阻止用户回答问题,但在这里并不重要)。

邮票应该出现在列表视图的顶部(如屏幕顶部),并且可以以与列表视图相同的速度滚动,也就是说,当列表视图中最初位于其下方的项目消失在屏幕顶部时,它应该消失滚动。

任何想法如何实现这一目标?

Solutions Collecting From Web of "Android:使ListView顶部的视图与列表视图一起滚动"

我find了解决scheme。 不知道它是否太优雅,但它的作品将离开它,除非有人提出更好的东西。

我想与列表一起滚动的视图是一个自定义视图,它必须知道列表视图。 所以我实现了一个setListView(ListView listView)方法:

private int scrollY; //1 private Map<Integer, Integer> listViewItemHeights = new Hashtable<>(); public void setListView(final ListView listView) { listView.setOnScrollListener(new OnScrollListener() { //2 @Override public void onScrollStateChanged(AbsListView view, int scrollState) {} //3 @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //4 View c = listView.getChildAt(0); if (c != null) { int oldScrollY = scrollY; scrollY = -c.getTop(); listViewItemHeights.put(listView.getFirstVisiblePosition(), c.getHeight()); for (int i = 0; i < listView.getFirstVisiblePosition(); ++i) { if (listViewItemHeights.get(i) != null) scrollY += listViewItemHeights.get(i); } scrollBy(0, scrollY - oldScrollY); } } }); } 

评论1:这是一个让我跟踪当前滚动位置的variables。

评论2:设置一个新的滚动监听器让我的自定义视图知道什么时候列表

评论3:这种情况不需要执行。

评论4:这是魔术发生的地方。 注意最后,我通过scrollY – oldScrollY滚动我的视图,让我先从这个位开始。 oldScrollY是保存的滚动位置,scrollY是新的。 我需要滚动他们之间的差异。 至于如何计算scrollY我引用你到我的答案在这里: Android获取滚动位置在ListView中的确切位置,滚动位置是如何计算在列表视图。

为顶部屏幕视图,您可以添加headerview所以绑定coustom布局作为listview的标题布局..所以你有相同的滚动列表视图…

 View headerview = ((LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.track_footer_view, null, false); listview.addHeaderView(headerview);