资源简介

Android的歌词播放demo,是QQ音乐桌面歌词的效果,可播放LRC歌词,有过渡效果,对应博客地址:http://blog.csdn.net/ysb794008002/article/details/52037724

资源截图

代码片段和文件信息

package com.ysbing.lrcshow;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 歌词显示区域
 * 


 * 比较难的逻辑,就是两句歌词交替显示
 * 如果歌词1为空,设置歌词1为下一句歌词,记录时间1-时间2为歌词2的等待时间
 * 歌词1播放->时间2-时间1
 * 


 * 记录开始时间
 * 播放前获取现在时间,减去和歌词时间的差
 * 歌词结束时间减去开始播放时间,算出速度
 */
public class LRCFragment extends Fragment {
    private View mView;
    private LRCTextView lrcTv1;
    private LRCTextView lrcTv2;
    private TextView mTimeView;
    private LrcUtil lrcUtil;
    private Timer mTimer;
    private long musicDuration;
    private float time;
    private long startTime;
    private boolean isEnd;

    @Override
    public View onCreateView(LayoutInflater inflater ViewGroup container Bundle savedInstanceState) {
        if (mView != null) {
            return mView;
        }
        mView = inflater.inflate(R.layout.fragment_lrc container false);
        initUI();
        return mView;
    }

    private void initUI() {
        lrcTv1 = (LRCTextView) mView.findViewById(R.id.lrcTv1);
        lrcTv2 = (LRCTextView) mView.findViewById(R.id.lrcTv2);
        mTimeView = (TextView) mView.findViewById(R.id.time);
    }

    /**
     * 开始歌词的播放
     */
    public void start(final String lrcPath int musicDuration) throws FileNotFoundException {
        this.musicDuration = musicDuration * 1000;//转换成毫秒
        this.startTime = System.currentTimeMillis();
        lrcUtil = new LrcUtil(new File(lrcPath));
        new Thread(new Runnable() {
            @Override
            public void run() {
                time1 = time2 = 0;
                word1 = word2 = null;
                isEnd = false;
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        lrcTv1.cancel();
                        lrcTv2.cancel();
                        showTime();
                        showLrc1();
                    }
                });
            }
        }).start();
    }

    private void showTime() {
        time = 0;
        if (mTimer != null)
            mTimer.cancel();
        mTimer = new Timer();
        TimerTask task = new TimerTask() {
            public void run() {
                time += 0.1;
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        String text = String.format(Locale.getDefault() “time:%.1f“ time);
                        mTimeView.setText(text);
                    }
                });
            }
        };
        mTimer.schedule(task 


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        127  2016-07-26 16:13  LrcShow\.gitignore

     文件          8  2016-07-26 16:13  LrcShow\app\.gitignore

     文件       9314  2016-07-26 16:39  LrcShow\app\app.iml

     文件        605  2016-07-26 16:19  LrcShow\app\build.gradle

     文件        662  2016-07-26 16:13  LrcShow\app\proguard-rules.pro

     文件        719  2016-07-26 17:07  LrcShow\app\src\main\AndroidManifest.xml

     文件       2049  2016-07-26 16:53  LrcShow\app\src\main\assets\演员.lrc

     文件       6997  2016-07-26 16:46  LrcShow\app\src\main\java\com\ysbing\lrcshow\LRCFragment.java

     文件       4507  2016-07-26 16:20  LrcShow\app\src\main\java\com\ysbing\lrcshow\LRCTextView.java

     文件       3960  2016-07-26 16:46  LrcShow\app\src\main\java\com\ysbing\lrcshow\LrcUtil.java

     文件       1771  2016-07-26 17:11  LrcShow\app\src\main\java\com\ysbing\lrcshow\MainActivity.java

     文件       1154  2016-07-26 16:51  LrcShow\app\src\main\res\layout\activity_main.xml

     文件       1184  2016-07-26 16:37  LrcShow\app\src\main\res\layout\fragment_lrc.xml

     文件       3418  2016-07-26 16:13  LrcShow\app\src\main\res\mipmap-hdpi\ic_launcher.png

     文件       2206  2016-07-26 16:13  LrcShow\app\src\main\res\mipmap-mdpi\ic_launcher.png

     文件       4842  2016-07-26 16:13  LrcShow\app\src\main\res\mipmap-xhdpi\ic_launcher.png

     文件       7718  2016-07-26 16:13  LrcShow\app\src\main\res\mipmap-xxhdpi\ic_launcher.png

     文件      10486  2016-07-26 16:13  LrcShow\app\src\main\res\mipmap-xxxhdpi\ic_launcher.png

     文件         78  2016-07-26 16:52  LrcShow\app\src\main\res\values\strings.xml

     文件        528  2016-07-26 16:13  LrcShow\build.gradle

     文件        747  2016-07-26 16:13  LrcShow\gradle.properties

     文件       4971  2016-07-26 16:13  LrcShow\gradlew

     文件       2404  2016-07-26 16:13  LrcShow\gradlew.bat

     文件        427  2016-07-26 16:13  LrcShow\local.properties

     文件        861  2016-07-26 16:14  LrcShow\LrcShow.iml

     文件         16  2016-07-26 16:13  LrcShow\settings.gradle

     目录          0  2016-07-26 17:11  LrcShow\app\src\main\java\com\ysbing\lrcshow

     目录          0  2016-07-26 16:17  LrcShow\app\src\main\java\com\ysbing

     目录          0  2016-07-26 16:16  LrcShow\app\src\main\java\com

     目录          0  2016-07-26 16:13  LrcShow\app\src\main\res\drawable

............此处省略19个文件信息

评论

共有 条评论