在 ListView 滚动的同时滚动视图
Scroll view at same time that ListView is scrolling
我有一个带有 ListView 和自定义视图的 RelativeLayout。我以编程方式将自定义视图的大小设置为 ListView 的大小。所以我在 ListView 的顶部有自定义视图,两者大小相同。显然 ListView 没有滚动,因为 onTouchListener 在 customView 上。如何让两者同时滚动?
最后,我在我的自定义视图 class 中创建了一个函数,并将 ListView 和行数作为参数。在视图中,我将 setOnScrollListener 设置为 ListView,并在滚动到自定义视图的全局滚动变量时分配 ListView 的位置。像这样
public void setListView(final TwoWayView listView, int totalListRows) {
totalColumns = totalListRows;
for (int i = 0; i < totalColumns; i++) {
listViewItemHeights.put(i, (int) getResources().getDimension(R.dimen.column_width));
}
listView.setOnScrollListener(new TwoWayView.OnScrollListener() {
@Override
public void onScrollStateChanged(TwoWayView view, int scrollState) {
}
@Override
public void onScroll(TwoWayView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
c = listView.getChildAt(0);
if (c != null) {
int oldScrollX = scrollX;
scrollX = -c.getLeft();
for (int i = 0; i < listView.getFirstVisiblePosition(); ++i) {
if (listViewItemHeights.get(i) != null) {
scrollX += listViewItemHeights.get(i);
}
}
scrollBy(scrollX - oldScrollX, 0);
}
}
});
}
我有一个带有 ListView 和自定义视图的 RelativeLayout。我以编程方式将自定义视图的大小设置为 ListView 的大小。所以我在 ListView 的顶部有自定义视图,两者大小相同。显然 ListView 没有滚动,因为 onTouchListener 在 customView 上。如何让两者同时滚动?
最后,我在我的自定义视图 class 中创建了一个函数,并将 ListView 和行数作为参数。在视图中,我将 setOnScrollListener 设置为 ListView,并在滚动到自定义视图的全局滚动变量时分配 ListView 的位置。像这样
public void setListView(final TwoWayView listView, int totalListRows) {
totalColumns = totalListRows;
for (int i = 0; i < totalColumns; i++) {
listViewItemHeights.put(i, (int) getResources().getDimension(R.dimen.column_width));
}
listView.setOnScrollListener(new TwoWayView.OnScrollListener() {
@Override
public void onScrollStateChanged(TwoWayView view, int scrollState) {
}
@Override
public void onScroll(TwoWayView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
c = listView.getChildAt(0);
if (c != null) {
int oldScrollX = scrollX;
scrollX = -c.getLeft();
for (int i = 0; i < listView.getFirstVisiblePosition(); ++i) {
if (listViewItemHeights.get(i) != null) {
scrollX += listViewItemHeights.get(i);
}
}
scrollBy(scrollX - oldScrollX, 0);
}
}
});
}