package com.konka.music.lrc; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import com.konka.music.R; import com.konka.music.util.ArrayUtils; public class LyricView extends View { private final static String TAG = LyricView.class.getSimpleName(); private Paint paint = new Paint();// 画笔,用于画不是高亮的歌词 private Paint paintHL = new Paint(); // 画笔,用于画高亮的歌词,即当前唱到这句歌词 private int SIZEWORD = 25;// 显示歌词文字的大小值 private int SIZEWORDHL = 30;// 显示歌词文字的大小值 public static final int INTERVAL = 40;// 歌词每行的间隔 public int playIndex = 0; public LyricView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public LyricView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public LyricView(Context context) { super(context); init(); } public void init() { paint = new Paint(); paint.setTextAlign(Paint.Align.CENTER); paint.setColor(getResources().getColor(R.color.lyrics)); paint.setTextSize(SIZEWORD); paint.setAntiAlias(true); paint.setDither(true); paint.setAlpha(180); paintHL = new Paint(); paintHL.setTextAlign(Paint.Align.CENTER); paintHL.setColor(getResources().getColor(R.color.lyrics_hl)); paintHL.setTextSize(SIZEWORDHL); paintHL.setAntiAlias(true); paintHL.setAlpha(255); } /** * 讲歌词已经播放的时间传入这里就可以实现歌词滚动了 * * @param currentTimeMillis */ public void setCurPosition(int currentTimeMillis) { if (!ArrayUtils.isEmpty(lyricObjects)) { if (playIndex >= lyricObjects.size()) return; for (int i = playIndex; i < lyricObjects.size(); i++) { if (currentTimeMillis >= lyricObjects.get(i).getBegintime()) { if (i + 1 < lyricObjects.size()) { if (currentTimeMillis <= lyricObjects.get(i + 1).getBegintime()) { playIndex = i; postInvalidate(); return; } } else { playIndex = i; postInvalidate(); return; } } } } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (!ArrayUtils.isEmpty(lyricObjects)) { for (int i = 0; i < lyricObjects.size(); i++) { canvas.drawText(lyricObjects.get(i).getLrc(), this.getWidth() >> 1, // INTERVAL * (i - playIndex) + (this.getHeight() >> 1), i == playIndex ? paintHL : paint); } } else { // canvas.drawText("没有找到歌词", this.getWidth() >> 1, this.getHeight() >> 1, paint); } } public void setLyricObjects(List<LyricObject> lyricObjects) { this.lyricObjects = lyricObjects; playIndex = 0; postInvalidate(); } public List<LyricObject> getLyricObjects() { return lyricObjects; } private List<LyricObject> lyricObjects = null; }