我正在尝试制作一个ListView
用于显示歌词的内容。我在制作自定义复合视图方面经验很少。所以我想知道我的方法应该是什么来表达这个观点。ListView
必须具备这些功能
- 根据歌曲自动滚动(时间信息将存储在列表适配器中)
- 突出显示正在播放的音频的当前行
- 在某些行上进行缩进,使其看起来更像一首格式精美的诗
- 用户在播放歌曲时不能滚动列表(即列表正在自动滚动),但在歌曲暂停时应该可以滚动
我不知道视图是否应该扩展列表视图。如果不是,那么它应该扩展什么,我的方法应该是什么?
我正在尝试制作一个ListView
用于显示歌词的内容。我在制作自定义复合视图方面经验很少。所以我想知道我的方法应该是什么来表达这个观点。ListView
必须具备这些功能
我不知道视图是否应该扩展列表视图。如果不是,那么它应该扩展什么,我的方法应该是什么?
坦率地说,我真的没有足够的信息来完全回答这个问题,但这就是我会做的:
如果由我决定,因为您根本不想要滚动功能(您想让它看起来好像在滚动,而不是实际上允许用户滚动),我不会使用任何复杂的视图像 ListView 或 ScrollView 一样,我只会写一个自定义视图,只是扩展 View。我会覆盖它的 onDraw() 方法并使用 Canvas.drawText(...) 来绘制单词,有两种不同的 Paint,一个用于当前单词,另一个用于所有其他单词。至于“滚动”效果,你可以保留一个数字,代表你能看到的当前顶行,当你想滚动到下一行时,在这个数字上加一个。但是,为了使其平滑,您可以操纵开始绘制文本的确切位置并将其缓慢向上移动,以便看起来所有内容都在向下滚动。
** 也许在这里使用 SurfaceView 而不是仅使用 View 会更好,特别是如果您想要背景图像和平滑混合以及更好的外观,因为 SurfaceView 更适合复杂的绘图**
如果这对您来说太复杂了,并且您想完全使用现有视图而不自己进行任何绘图,我建议您使用垂直 ScrollView,您为每行填充水平 LinearLayouts 的 ScrollView,并且每行都用 TextViews 填充每个特定的词。您可以以编程方式构建 TextViews 和 LinearLayouts。使用 ScrollView 的 scrollTo(...) 或 SmoothScrollTo(...) 滚动到正确的位置。您可以通过在用于滚动之前捕获所有运动事件来防止用户滚动。
当然,这两种方法都需要您维护某种形式的数据结构来保存每个单词被选中的时间。