2

我在这个主题上搜索并尝试了很多。我想做的基本上是一个垂直的画廊/封面流。我知道这应该通过自定义 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 中滚动时,我无法将最后一项或第一项居中,因为进一步滚动时列表视图为空。这样做的一种可能性是在末尾和顶部添加一些额外的项目。问题是我想使用列表视图分隔符,它看起来很丑,里面有空视图。另一件事是我想让它不依赖于显示尺寸,这应该很困难,因为最后一项不会完全居中。

谁能帮我解决这两个问题中的任何一个?最简单的方法是获取一些现有代码。

谢谢!

4

0 回答 0