在android下顯示歌詞的控件:OpenLRC

jopen 10年前發布 | 35K 次閱讀 OpenLRC Android開發 移動開發

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.baiduhome.net/lib/view/home/1412599499750

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!