2010-06-17 70 views
0

我正在试图制作一个ScrollView,其中包含一个用户可以从中选择的数字列表。在用户触摸并滚动后,手指抬起后,我希望滚动“捕捉”到ScrollView中间的项目并给我输出。我的ScrollView包含一个带有TextView对象的垂直线性布局。 ScrollView的垂直尺寸约为60sp。如何在触摸后更改ScrollView的位置?

我认为这将涉及与ACTION_UP ScrollView.onTouch,但我不知道如何使用它。此外,有没有办法根据列表中的某个位置获取项目的索引或值?

谢谢!

回答

0

你在使用ListView吗?请参阅Hello ListView以开始使用其中一个。我不确定你是什么意思,通过捕捉中间的项目,但是当滚动ListView时,我相信你总是会将listView的顶部与项目的顶部对齐。

对于项目的索引或位置,ListView项目有两个概念。该位置是项目在整个列表中的位置(通常是用于填充ListView的ArrayAdapter)。该id是屏幕上的可见位置。因此,如果屏幕的顶部项目将有ID 0,但可能有位置20.请参阅Javadocs

+0

现在我正在做的是制作一个带有linearLayout作为其子的ScrollView。 LinearLayout里面有一堆数字(100,125,150 ... 1000)。用户将触摸他的手指并拖动,直到所需的号码在中间(或最近)。手指被移除后,ACTION_UP,最接近中间的数字将被精确地锁定到中间(通过smoothScrollTo方式),中间数字将被选中和使用。这就是我想要做的。 – Matt 2010-06-18 00:52:05

+0

我现在有这样的工作。我在做的是1)ACTION_UP我用.getScrollY()获取ScrollView的当前位置。 2)我使用一些数学来获得所需的滚动位置:((int)Math.round(posY/20)* 20)+ 10.注意数字20是项目之间的近似距离,10是中间的偏移。 3)我使用smoothScroll移动。 4)我用一些数学来计算列表中位于中间位置的数字。 5)我得到文本视图与(TextView)findViewById(R.id.(listview.getChildAt(x).getId()))。 6)我将文本转换为int。 – Matt 2010-06-18 01:02:01

+0

很高兴你有它的工作..是否有你不想使用ListView的原因?它看起来更适合你的情况比scrollView。另外,你是否依赖像素数学呢?请记住,不同的手机有不同的分辨率,因此可能会出现问题。 – 2010-06-18 16:52:02