我有一个列表视图这显然是滚动的。 列表视图中包含某种形式的问题。 一旦用户submitts形式我们把邮票般寻找自定义视图在列表视图的顶部(和阻止用户回答问题,但此处无关紧要)。
印模应该出现在列表视图的顶部(如屏幕的顶部)和可滚动以相同的速度作为列表视图,即,它应该消失时最初列表视图项下方它消失在屏幕时的顶滚动。
任何想法如何实现这一目标?
我有一个列表视图这显然是滚动的。 列表视图中包含某种形式的问题。 一旦用户submitts形式我们把邮票般寻找自定义视图在列表视图的顶部(和阻止用户回答问题,但此处无关紧要)。
印模应该出现在列表视图的顶部(如屏幕的顶部)和可滚动以相同的速度作为列表视图,即,它应该消失时最初列表视图项下方它消失在屏幕时的顶滚动。
任何想法如何实现这一目标?
我找到了解决办法。 不知道这是太高雅了,但它的作品所以,除非有人想出了更好的东西会离开它。
我要与名单一起滚动视图是一个自定义视图,其中有了解的列表视图。 所以,我实现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);
}
}
});
}
点评一:这让我跟踪当前的滚动位置的变量。
点评二:设置一个新的滚动监听器,让我的自定义视图知道何时列表
点评三:这并不需要在这种情况下实施。
点评四:这就是魔术发生。 请注意,在最后我滚动我的看法由scrollY - oldScrollY,让我与该位开始第一。 oldScrollY是保持滚动位置,scrollY是新的。 我需要通过它们之间的区别滚动。 至于scrollY是如何计算的我是指你在这里我的答案: 安卓在获得确切的ListView滚动位置 ,它是滚动位置是如何在列表视图计算。
顶级屏幕的查看您可以添加headerview所以绑定coustom布局的listview..so你已经滚动相同的ListView headerlayout ...
View headerview = ((LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.track_footer_view, null, false);
listview.addHeaderView(headerview);