3

我正在编写一个时间选择器小部件,它由几个 ListView(天、小时、分钟等)组成。分钟 ListView 具有 Integer.MAX_VALUE 元素(一遍又一遍地重复 0-59)。每当用户抛出列表时,我希望它在 0、15、30 或 45 处停止。我尝试使用 setSelection,但即使它选择了正确的元素,它也不会使抛出速度无效,因此列表会继续抛出。

如果您有任何想法,请帮助我。

4

2 回答 2

2

ListView: public void smoothScrollToPosition (int position)

也许这会对你有所帮助。从未使用过它,但看起来它可能是一个解决方案。

于 2012-07-24T12:20:51.917 回答
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。

于 2012-07-27T08:53:22.797 回答