我在这个主题上搜索并尝试了很多。我想做的基本上是一个垂直的画廊/封面流。我知道这应该通过自定义 ListView 来完成。而我正是这样做的。
这样做时,我似乎有两个我无法解决的问题:
i)在列表中滚动时,我希望项目在“插槽”中移动。最重要的是,居中的项目应该正好移动到我画的 roundRect 上方。为了更好的可视化:这正是“CoverFlow”所做的,但是以水平的方式。试图覆盖 onScrollStateChanged 似乎无法确定地工作。这是我尝试的方式:
public void registerScrollListener(){
setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState == OnScrollListener.SCROLL_STATE_IDLE){
int first = getFirstVisiblePosition();
int last = getLastVisiblePosition();
List<View> childs = new ArrayList<View>();
for(int i = first; i < last; i++){
childs.add(getChildAt(i));
}
int centerHeight = getHeightCenterOfSideView();
int centerPos = 0;
int distance = Integer.MAX_VALUE;
for(View childView : childs){
int newDist = Math.abs(centerHeight - (childView.getTop() + (childView.getHeight()/2)));
if(newDist < distance){
distance = newDist;
centerPos = childs.indexOf(childView);
}
}
View childView = getChildAt(centerPos);
smoothScrollToPosition(centerPos, centerHeight - (childView.getTop() + (childView.getHeight()/2)));
}
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
});
}
ii) 在非圆形 ListView 中滚动时,我无法将最后一项或第一项居中,因为进一步滚动时列表视图为空。这样做的一种可能性是在末尾和顶部添加一些额外的项目。问题是我想使用列表视图分隔符,它看起来很丑,里面有空视图。另一件事是我想让它不依赖于显示尺寸,这应该很困难,因为最后一项不会完全居中。
谁能帮我解决这两个问题中的任何一个?最简单的方法是获取一些现有代码。
谢谢!