我在这个主题上搜索并尝试了很多。我想要做的基本上是一个垂直的Gallery / CoverFlow。我知道这应该使用自定义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中滚动时,我无法将最后一个或第一个项目居中,因为当进一步滚动时listview为空。这样做的可能性是在末尾和顶部添加一些额外的项目。问题是我想使用listview分隔符,它看起来很丑,其中包含空视图。另一件事是我想要使这个显示尺寸不重要,这应该是困难的,看到最后一个项目不会完全居中。
任何人都可以帮我解决这两个问题吗?最简单的方法就是采用一些现有的代码。
谢谢!