垂直ListView / CoverFlow使所选图像居中

时间:2012-04-30 15:53:42

标签: android listview user-interface gallery center

我在这个主题上搜索并尝试了很多。我想要做的基本上是一个垂直的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分隔符,它看起来很丑,其中包含空视图。另一件事是我想要使这个显示尺寸不重要,这应该是困难的,看到最后一个项目不会完全居中。

任何人都可以帮我解决这两个问题吗?最简单的方法就是采用一些现有的代码。

谢谢!

0 个答案:

没有答案