Android 自定义歌词同步控件 Android 音乐播放器中,播放音乐的类(即MediaPlayer)在播放音乐的时候,通过MediaPlayer的getCurrentPosition 方法可以得到当前音乐播放的流进度,通过getDuration 可以得到当前音乐总的流大小。因此,我们可以通过这两个方法来判断同步的音乐歌词播放进度。下面,该文档将为大家实现歌词同步,其他音乐播放的东西一概不涉及。 歌词同步相关两个类: SongLyric(歌词对象) 歌词对象实例化即可使用,但必须保证该歌词对象验证通过,即歌词文件存在,切正确实例化。 LyricView(Android 自定义歌词控件) 该歌词控件不可以写在xml 配置文件中,必须使用一个 layout 布局控件存放,使用的时候先从 Activity 中得到layout,然后再将该歌词控件通过layout 的getContext 的参数实例化,最后添加到layout 中,并且将对应的歌词对象 SongLyric 设置到歌词控件中。最后,歌词控件要做到与音乐同步的效果,还得时时刷新歌词控件,这样就有了歌词同步以及滚动的效果。具体实现方法下面讲到,先看看这两个类源码: SongLyric 类,该对象和网上大部分歌词对象一样,这里为了和歌词控件LyricView 配套,多了一部分方法。 package cn.zuxia.android.widget; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 歌词对象 * * @author samsung * */ public final class SongLyric { // 歌名 private String title = ""; // 歌手名 private String artist = ""; // 专辑名 private String album = ""; // 偏移时间 private long offset = 0; // 最大时间 private long maxTime = 0; // 歌词内容 private Map lrcs = new HashMap(); // 验证是否通过 private boolean valid = false; public SongLyric(String url) { File file = new File(url); if (file.exists()) { try { // 构建读取器 BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(file), "gbk")); String line = null; while ((line = br.readLine()) != null)...