我正在编写一个时间选择器小部件,它由几个 ListView(天、小时、分钟等)组成。分钟 ListView 具有 Integer.MAX_VALUE 元素(一遍又一遍地重复 0-59)。每当用户抛出列表时,我希望它在 0、15、30 或 45 处停止。我尝试使用 setSelection,但即使它选择了正确的元素,它也不会使抛出速度无效,因此列表会继续抛出。
如果您有任何想法,请帮助我。
ListView: public void smoothScrollToPosition (int position)
也许这会对你有所帮助。从未使用过它,但看起来它可能是一个解决方案。
谢谢你的帮助!我试过了,即使它停止了列表视图,但每次停止的位置都略有不同,所以最后我使用了另一种解决方案。
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。