用于显示歌词的Android ListView

时间:2013-10-31 21:36:30

标签: android listview android-listview android-custom-view

我正在尝试制作ListView以显示歌词。我对制作自定义复合视图的经验很少。所以我想知道我的方法应该是什么来实现这个观点。 ListView必须具有这些功能

  • 基于歌曲自动滚动(时间信息将存储在列表适配器中)
  • 突出显示正在音频上播放的当前行
  • 在某些行上缩进,使其看起来更像一首格式精美的诗
  • 用户不应该在播放歌曲时滚动列表(即列表正在自动滚动)但在歌曲暂停时应该可以滚动

我不知道视图是否应该扩展列表视图。如果没有那么它应该扩展什么,我的方法应该是什么?

1 个答案:

答案 0 :(得分:0)

坦率地说,我真的没有足够的信息来完全回答这个问题,但这就是我要做的事情:

如果由我决定,因为你根本不想要一个滚动功能(你想让它看起来像是滚动,而不是实际上允许用户滚动),我不会使用任何一个像ListView或ScrollView这样的复杂视图,我只想编写一个自定义视图,只需扩展View。我会覆盖它的onDraw()方法并使用Canvas.drawText(...)绘制单词,有两个不同的Paints,一个用于当前单词,另一个用于所有其他单词。至于“滚动”效果,您可以保留一个代表您可以看到的当前顶行的数字,并在您想要滚动到下一行时为该数字添加一个。然而,为了使其平滑,您可以操纵准确开始绘制文本的位置并将其缓慢向上移动,以便看起来所有内容都向下滚动。

**也许最好在这里使用SurfaceView而不仅仅是View,特别是如果你想要背景图像和平滑混合以及更好的外观,因为SurfaceView对于复杂的绘图来说要好得多**

如果这对你来说太复杂了,你想完全使用现有的视图而不自己做任何绘图,我建议使用垂直ScrollView,用每行的水平LinearLayout填充ScrollView,并且每个都填充使用TextViews表示每个特定单词。您可以以编程方式构建TextViews和LinearLayouts。使用ScrollView的scrollTo(...)或SmoothScrollTo(...)滚动到正确的位置。您可以通过捕获所有运动事件来阻止用户滚动。

这两种方法当然都要求你保持某种形式的数据结构来保持每个单词的选择时间。