在android下显示歌词的控件:OpenLRC

jopen 10年前

a lrc view for android

一个可以在android下显示歌词的控件可以设置歌词字体大小,当前行歌词的颜色、其他行歌词的颜色、行间距等。

image

使用方法:

1、xml布局:

<org.load.openlrc.LrcView      android:id="@+id/lrc"      android:layout_marginTop="100dip"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:background="@android:color/white"      lrc:currentTextColor="@android:color/holo_orange_light"      lrc:normalTextColor="@android:color/white"      lrc:rows="5"      lrc:textSize="20sp"      lrc:dividerHeight="10dip" />

2、在activity中使用:

public class MainActivity extends Activity {  private LrcView mLrc;  private MediaPlayer mPlayer;  private String mDir = Environment.getExternalStorageDirectory() + File.separator + "Download" + File.separator;    @Override  protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);        // 歌曲路径      String music = mDir + "1.mp3";      // 歌词路径      String lrc = mDir + "1.lrc";        mLrc = (LrcView) findViewById(R.id.lrc);      // 设置背景图片      // 可以选择不设置      // 最好是在真个屏幕设置该图片      // 那样更好看      mLrc.setBackground(BitmapFactory.decodeFile(mDir + "1.png"));        mPlayer = new MediaPlayer();      try {          mPlayer.setDataSource(music);          mPlayer.setOnPreparedListener(new PreparedListener());          mPlayer.prepareAsync();            // 设置lrc的路径          mLrc.setLrcPath(lrc);      } catch (Exception e) {          e.printStackTrace();      }  }    private class PreparedListener implements OnPreparedListener {      @Override      public void onPrepared(MediaPlayer mp) {            mPlayer.start();          new Thread(new Runnable() {              @Override              public void run() {                  // 当歌曲还在播放时                  // 就一直调用changeCurrent方法                  // 虽然一直调用, 但界面不会一直刷新                  // 只有当唱到下一句时才刷新                  while(mPlayer.isPlaying()) {                      // 调用changeCurrent方法, 参数是当前播放的位置                      // LrcView会自动判断需不需要下一行                      mLrc.changeCurrent(mPlayer.getCurrentPosition());                        // 当然这里还是要睡一会的啦                      try {                          Thread.sleep(100);                      } catch (InterruptedException e) {                          e.printStackTrace();                      }                  }              }          }).start();      }  }    }

项目主页:http://www.open-open.com/lib/view/home/1412599499750