Android歌词秀设计思路(2)歌词处理(2)
来源:未知 责任编辑:责任编辑 发表时间:2014-05-10 12:23 点击:次
1-4 LyricPlayerService创建SafetyTimer并指定前一步创建的SafetyTimer.OnTimerListener
1-5 LyricPlayerService将自己指定成LyricAdapter的listener.
2.解析歌词
2-1 LyricPlayerService调用LyricAdapter.LoadLyric方法,参数为字幕文件的文件路径+文件名。
2 -2 LyricAdapter在LoadLyric的最后会调用LyricPlayerService.onLyricLoaded方法进行通知。
3.启动Timer并处理播放时间通知
3-1 在启动播放器的同时启动SafetyTimer
3-2 当定时时间到了已有,SafetyTimer会调用在1-3中创建的OnTimeListener对象的OnTimer方法。
3-3 在OnTimer方法中,OnTimeListener首先从MediaPlayer取得现在的播放位置,然后调用LyricAdapter的notifyTime方法将位置传递个LyricAdapter。
3-4 LyricAdapter根据播放位置取得当前的歌词并通知LyricPlayerService进行相应的处理。
需要补充一点,在这里我们定义了一个LyricListener接口实现了,既可以将消息通知给LyricPlayerService有避免了LyricAdapter对LyricPlayerService的依赖关系。这一点和Andorid歌词秀设计思路(1)SafetyTimer中用到的是一样的方法。
以下是LyricAdapter的代码,请参考。很简单的。
package LyricPlayer.xwg;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import android.util.Log;
public class LyricAdapter{
private ArrayList<LyricLine> mLyricLines= null;
private LyricListener mListener = null; //歌词载入,变化Listener
private int mCurrentLyric = 0; //当前的歌词
private int mLyricOffset = -300; //为了解决播放滞后的问题设置的调整时间,单位是毫秒
private static final String TAG = new String("LyricAdapter");
//用于向外通知歌词载入,变化的Listener
public interface LyricListener{
public void onLyricChanged(int lyric_index);
public void onLyricLoaded();
}
//歌词信息
private class LyricLine{
long mLyricTime; //in milliseconds
String mLyricText;
LyricLine(long time, String lyric){
mLyricTime = time;
mLyricText = lyric;
}
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>