我正在编写一个时间选择器小部件,它包含多个ListView(天,小时,分钟等)。分钟ListView具有Integer.MAX_VALUE元素(反复重复0-59)。 每当用户甩动列表时,我希望它停止在0,15,30或45.我尝试使用setSelection,但即使它选择了正确的元素,它也不会使fling速度无效,因此列表会继续投掷。
如果您有任何想法,请帮助我。
答案 0 :(得分:2)
ListView: public void smoothScrollToPosition (int position)
也许这会对你有所帮助。从来没有使用它,但看起来它可能是一个解决方案。
答案 1 :(得分:1)
感谢您的帮助!我试过了,即使它停止了列表视图,它停止的位置每次都略有不同,所以最后我使用了另一个解决方案。
if((firstVisibleItem % 60 == 13 || firstVisibleItem % 60 == 28 || firstVisibleItem % 60 == 43 || firstVisibleItem % 60 == 58) && !stopped)
{
MotionEvent me = MotionEvent.obtain(10, SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0);
MotionEvent me2 = MotionEvent.obtain(10, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 0, 0, 0);
mMinutesListView.dispatchTouchEvent(me);
mMinutesListView.dispatchTouchEvent(me2);
mMinutesListView.setSelection(firstVisibleItem);
stopped = true;
}
然后在onScrollStateChanged方法中,如果是SCROLL_STATE_FLING,我将“已停止”布尔变量设置为false。