我正在开发音乐应用。我想粗体当前正在播放的歌曲(例如Google Play音乐)的信息。有所有歌曲的ListView,由每个歌曲的歌曲信息的RelativeLayout填充。通过单击ListView(可以播放任何歌曲)或按上一个或下一个(将播放相邻歌曲)来播放歌曲。
我不想使用ScrollView,因为歌曲库可能要显示很多条目。
我需要能够
我已经查看了GPM源代码here,但我不知道它在哪里执行此操作。任何帮助将不胜感激:)
答案 0 :(得分:1)
无论使用ListView
还是RecyclerView
,解决方案的通用模板都是相同的:您应该存储对(a)“当前播放”索引或(b)的引用)的“当前播放中”数据项。
让我们看看如果您使用ListView
并保存“当前播放”索引将是什么解决方案。
第一步是保存当前正在播放的变量。也许您使用int
并将特殊值-1
视为没有任何内容在播放。
private int currentlyPlayingPosition;
无论何时更改当前正在播放的歌曲,都将更新存储在此处的值(当用户按下“下一首歌曲”时,++currentlyPlayingPosition
等)。然后,您还必须调用adapter.notifyDataSetChanged()
来告诉ListView
重新绘制自身,以使粗体歌曲改变。
在您的getView()
方法中,您可以检查所绘制的视图是否为“当前播放中”的歌曲,并根据该字体更改字体:
@Override
public View getView(int position, View convertView, ViewGroup container) {
...
if (position == currentlyPlayingPosition) {
textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
} else {
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);
}
...
}
总体步骤相对简单:
getView()
内部,检查您显示的歌曲是否为当前播放的歌曲,如果是,则显示特殊的用户界面