【问题标题】:Android ListView for showing lyrics用于显示歌词的 Android ListView
【发布时间】:2013-10-31 21:36:29
【问题描述】:

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

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

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

【问题讨论】:

  • 你试过什么?您如何想象view 的工作方式?你有草图吗?
  • 我不确定 ListView 是否是您想要的,尽管它可以做到。不是所有向下滚动的东西都应该是 ListView,有时一个带有一些 TextView 的 ScrollView 就足够了。如果您希望用户根本无法滚动,我认为您需要的甚至可能不是 ScrollView,而是某种形式的自定义视图,您可以自己在其中进行绘图。

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


【解决方案1】:

坦率地说,我真的没有足够的信息来完全回答这个问题,但我会这样做:

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

** 也许在这里使用 SurfaceView 而不是仅使用 View 会更好,尤其是如果您想要背景图像和平滑混合以及更好的外观,因为 SurfaceView 更适合复杂的绘图**

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

当然,这两种方法都需要您维护某种形式的数据结构来保存每个单词被选中的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多