如何在Java中设置一个视图不随滚动视图滚动

4

是否可以通过编程的方式强制ScrollView中的View不滚动?

就像联系人列表中的字母标题一样。当用户滚动所有名字以'A'开头的联系人列表时,'A'栏不会滚动。当用户滚动到'A'的末尾时,'B'栏从ScrollView底部向上滚动,最终替换了顶部的'A'栏并停留在那里。

我的描述有点抽象,希望你能理解。

提前感谢。

3个回答

3
联系人列表使用ListView而不是ScrollView。我认为其中一种方法是在顶部有一个固定的标题。您可以根据屏幕上显示的内容更改其内容。
OnScrollListener附加到ListView。您将在onScroll中得到第一个可见位置的视图。然后根据视图中的内容更改标题的内容。
您不需要在ListView中添加头部来处理列表中的第一部分,因为它已经在您的ScrollListener中处理。保持头部行和顶部视图的样式相同,您将拥有固定标题的错觉。

我明白你的意思:在ScrollView外部有一个固定的顶部视图,以及其他滚动的头部视图在ScrollView内部。当滚动的头部视图到达顶部时,更改固定头部视图的文本。对于这个想法点赞,但我仍然希望有人能够解决我的问题。 - Some Noob Student

2
我认为您需要在ScrollView中结合“静态文本”方法和“段落标题”:列表应包含禁用/不可点击的项,其中包含字母“A”,“B”等。当一个部分标题滚动到视图顶部时,将静态TextView的内容更改为标题的内容。也就是说,当“B”标题项目滚出视图时,TextView现在包含“B”。
当然,困难的部分将是检测何时“部分标题”滚动到顶部或在相反方向滚动时进入视图。
为了加分,请在TextView中使用“push up”动画来模拟列表项滚入TextView的效果。(在SDK的“...\view\Animation2.java”中有此动画的示例)。
更新:经过进一步审查...这里有一些与使其工作相关的类等(对我来说这是一个有趣的练习!):
android.widget.AbsListView.OnScrollListener接口以查看如何检测滚动事件。您需要跟踪先前的“视图顶部”位置以确定滚动方向(以选择上滑或下滑动画)。
我列出的动画实际上并不是您想要的-最好查看android.widget.TextSwitcher类以及SDK/android-X/data/res/anim目录中的push*.xml文件。
您肯定需要自己的适配器子类来将部分视图注入列表中:getView(...)可以在行视图是部分标题还是其他行时设置其属性(bkgnd、文本样式等)。在您的TextSwitcher视图工厂中重用此代码以填充列表上方的静态TextView/Switcher。
玩得开心...!

谢谢你的动画提示,我会研究一下。加1! - Some Noob Student

2
如前所述,您需要一个ListView。 为了实现类似于Android 4+中People应用中的效果,我使用了这个优秀的(免费且开源),请保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接