Android Cookie

Android 安卓是最开放的手机操作系统,谷歌安卓APP开发和安卓市场的相关话题

Android的ListView – 停止滚动“整个”行位置

对于混乱的标题抱歉,我不能很简洁地expression这个问题。 我有一个使用圆形/“无限”适配器的ListView的Android应用程序,这基本上意味着我可以向上或向下滚动它,当它到达顶部或底部时,项目将环绕,使其看起来给用户,好像他正在旋转无限长的(〜100)重复项目列表。 这个设置的目的是让用户select一个随机的项目,只需旋转/抛出列表视图,并等待看它停在哪里。 我减less了列表视图的摩擦力,所以它变得更快,更长,这似乎工作真的很好。 最后,我在ListView的顶部放置了一个部分透明的图像,以阻止顶部和底部项目(从透明到黑色的过渡),使得用户似乎在中间“select”了项目,好像它们他们正在旋转的“轮子”,他们通过投掷控制。 有一个明显的问题:抛出后,ListView不停止在特定的项目,但它可以停止两个项目之间的hover(第一个可见的项目,那么只有部分显示)。 我想避免这种情况,因为在那种情况下哪个项目是“随机select的”并不明显。 长话短说:ListView完成滚动后滚动,我希望它停止在“整个”行,而不是部分可见的行。 现在我通过检查滚动停止的时间来实现这种行为,然后select第一个可见项,如下所示: lv = this.getListView(); lv.setFriction(0.005f); lv.setOnScrollListener(new OnScrollListener() { public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {} public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { if (isAutoScrolling) return; isAutoScrolling = true; int pos = lv.getFirstVisiblePosition(); lv.setSelection(pos); isAutoScrolling = false; } } […]