android怎么实现歌词自动滚动效果

  介绍

这篇文章主要介绍android怎么实现歌词自动滚动效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

最近在做安卓的MP3播放的项目,要实现歌词的自动滚动,以及同步显示。

抒情的歌词解析主要用yoyoplayer里面的,显示部分参考了这里,这里只是模拟MP3歌词的滚动。

先上一下效果图:

 android怎么实现歌词自动滚动效果

滚动实现的代码其实也简单。显示画出当前时间点的歌词,然后再分别画出改歌词后面和前面的歌,词前面的部分往上推移,后面的部分往下推移,这样就保持了当前时间歌词在中间。

代码如下LyricView,相关信息在注释了标明了。

package  ru.org.piaozhiye.lyric;,   import  java.io.File,   import 并不知道,   import  android.content.Context,   import  android.graphics.Canvas,   import  android.graphics.Color,   import  android.graphics.Paint,   import  android.graphics.Path,   import  android.graphics.Typeface,   import  android.util.AttributeSet,   import  android.widget.TextView,/* *,   ,* @author  root    *大敌;   ,*/public  class  LyricView  extends  TextView  {,   ,private  Paint  mPaint;   ,private  float  mX;   ,private  static  Lyric  mLyric,   ,private  Paint  mPathPaint;   ,public  String  test =,“test",,   ,public  int  index =, 0;,   ,private  List< Sentence>,列表,,   ,public  float  mTouchHistoryY;   ,private  int 我的;   ,private  long  currentDunringTime;//,当前行歌词持续的时间,用该时间来sleep    ,private  float  middleY;//, y轴中间,   ,private  static  final  int  DY =, 50,,//,每一行的间隔,   ,public  LyricView (Context 上下文),{,   ,超级(上下文);   ,init ();   }大敌;   ,public  LyricView (Context 上下文,AttributeSet  attr), {,   ,超级(上下文,attr);,   ,init ();   }大敌;   ,public  LyricView (Context 上下文,AttributeSet  attr,, int  i), {,   ,超级(上下文,attr, i),,   ,init ();   }大敌;   ,private  void  init (), {,   ,setFocusable(真正的),,   ,PlayListItem  pli =, new  PlayListItem (“Because  Of 你。,,   ,“/sdcard/MP3/Because  Of  You.mp3",, 0 l,,真的),,=,,mLyric  new 抒情(new 文件(“/sdcard/MP3/Because  Of  You.lrc"),,照明灯具),,=,,list  mLyric.list;,   ,//非高亮部分,=,,mPaint  new 油漆();,   ,mPaint.setAntiAlias(真正的),,   ,mPaint.setTextSize (22),,   ,mPaint.setColor (Color.WHITE);,   ,mPaint.setTypeface (Typeface.SERIF);,   ,//高亮部分,当前歌词,=,,mPathPaint  new 油漆();,   ,mPathPaint.setAntiAlias(真正的),,   ,mPathPaint.setColor (Color.RED);,   ,mPathPaint.setTextSize (22),,   ,mPathPaint.setTypeface (Typeface.SANS_SERIF);,   }大敌;   ,protected  void  onDraw (Canvas 画布),{,   ,super.onDraw(画布);,   ,canvas.drawColor (0 xefeffff),,   ,Paint  p =, mPaint;,   ,Paint  p2 =, mPathPaint;,   ,p.setTextAlign (Paint.Align.CENTER);,   ,if  (index ==, 1),   ,返回;   ,p2.setTextAlign (Paint.Align.CENTER);,   ,//先画当前行,之后再画他的前面和后面,这样就保持当前行在中间的位置,   ,canvas.drawText (list.get(指数).getContent (),, mX,, middleY,, p2),,   ,float  tempY =, middleY;,   ,//画出本句之前的句子,   ,for  (int 小姐:=,index 作用;1;,小姐:祝辞=,0;,我——),{,   ,//Sentence  sen =, list.get(我),   ,//向上推移,=,,tempY  tempY 作用;DY,,   ,if  (tempY  & lt;, 0), {,   ,打破;   }大敌;   ,canvas.drawText (list.get (i) .getContent (),, mX,, tempY,, p),,   ,//canvas.translate (0, DY);,   }大敌;=,,tempY  middleY;,   ,//画出本句之后的句子,   ,for  (int 小姐:=,index  +, 1;,小姐:& lt;, list.size();,我+ +),{,   ,//往下推移,=,,tempY  tempY  +, DY,,   ,if  (tempY 祝辞,我的),{,   ,打破;   }大敌;   ,canvas.drawText (list.get (i) .getContent (),, mX,, tempY,, p),,   ,//canvas.translate (0, DY);,   }大敌;   }大敌;   ,protected  void  onSizeChanged (int  w, int  h, int 噢,,int 哦),{,   ,super.onSizeChanged (w, h,,哎哟,,哦),,   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

android怎么实现歌词自动滚动效果