zhangliangming / hplyrics Goto Github PK
View Code? Open in Web Editor NEWAndroid仿酷狗动感歌词(支持翻译和音译歌词)显示效果,支持lrc歌词、ksc歌词、krc歌词、trc歌词、网易云API歌词和hrc歌词等歌词格式的显示,支持动感歌词制作。
Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果,支持lrc歌词、ksc歌词、krc歌词、trc歌词、网易云API歌词和hrc歌词等歌词格式的显示,支持动感歌词制作。
ManyLyricsView 这个类业务总结为两部分:一是从LyricsReader 拿到动感歌词数据,并根据歌词数据格式计算出Canvas 画法,;第二就是怎么实现画法了。这第二部分很多地方其实可以进行抽象的,比如画当前行、画当前行以上和画当前行以下这三部分进行抽象的话,用户可以自定义很多东西。比如画当前行时,用户可以将当前行字体画大一点、颜色改一下等等。
不知道怎么从你原项目中分离出 这个歌词的调用方法。
大佬,我在用歌词库的时候遇到了问题,求大佬帮忙分析下,542839122.万分感谢
<RelativeLayout
android:id="@+id/rlTop"
android:layout_width="match_parent"
android:layout_height="@dimen/top_height"
android:background="@color/colorPrimary">
<ImageView
android:id="@+id/imageViewBack"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:paddingLeft="20dp"
android:paddingTop="17dp"
android:paddingRight="20dp"
android:paddingBottom="17dp"
android:src="@drawable/back_arrow3x" />
<TextView
android:id="@+id/textViewTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text=""
android:textColor="@color/white"
android:textSize="20sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="68dp"
android:gravity="center"
android:orientation="vertical">
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="280dp"
android:layout_height="24dp"
android:layout_centerInParent="true"
android:max="100"
android:progress="0"
android:progressDrawable="@drawable/progress_bar_pingfen" />
<ImageView
android:id="@+id/imageViewAvatar"
android:layout_width="43dp"
android:layout_height="43dp"
android:layout_centerVertical="true"
android:layout_marginRight="-6dp"
android:layout_toLeftOf="@id/progressBar"
android:src="@drawable/avatar_default" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/progressBar"
android:layout_centerVertical="true"
android:layout_marginLeft="18dp"
android:layout_toRightOf="@id/imageViewAvatar"
android:text="0分"
android:textColor="@color/white"
android:textSize="12sp" />
</RelativeLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="76dp">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/line_height"
android:background="@color/line" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/line_height"
android:layout_gravity="bottom"
android:background="@color/line" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="30dp"
android:paddingRight="30dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="8dp"
android:layout_height="8dp"
android:src="@drawable/luzhi3x" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="录制 00:03/04:97"
android:textColor="@color/gray3"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center"
android:orientation="horizontal">
<View
android:layout_width="172dp"
android:layout_height="@dimen/line_height"
android:background="@color/line" />
<Button
android:layout_width="60dp"
android:layout_height="22dp"
android:background="@drawable/btn_normal_bg"
android:text="关闭原唱"
android:textColor="@color/white"
android:textSize="12sp" />
</LinearLayout>
<com.zlm.hp.lyrics.widget.ManyLyricsView
android:id="@+id/manyLyricsView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="30dp"
android:layout_marginBottom="30dp"
android:layout_weight="1"
android:background="@color/white" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_horizontal|top"
android:orientation="vertical">
<ImageView
android:id="@+id/imageViewChongchang"
android:layout_width="30dp"
android:layout_height="30dp"
android:padding="3dp"
android:src="@drawable/image_chongchang" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重唱"
android:textColor="@color/gray2"
android:textSize="14sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_horizontal|top"
android:orientation="vertical">
<ImageView
android:id="@+id/imageViewShengjiangdiao"
android:layout_width="30dp"
android:layout_height="30dp"
android:padding="3dp"
android:src="@drawable/image_shengjiangdiao" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="升降调"
android:textColor="@color/gray2"
android:textSize="14sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_horizontal|top"
android:orientation="vertical">
<ImageView
android:id="@+id/imageViewWancheng"
android:layout_width="30dp"
android:layout_height="30dp"
android:padding="3dp"
android:src="@drawable/image_wancheng" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="完成"
android:textColor="@color/gray2"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
我把demo下载下来后,把hplyricslibrary模块导入项目,加载raw下面的歌词文件正常,加载文件夹里面的给出文件报错:
代码如下:
protected String doInBackground(String... strings) {
if(StringUtil.isEmpty(banzou.krcFilePath)){
return null;
}
File krcFile=new File(banzou.krcFilePath);
if(krcFile==null || !krcFile.exists())
return null;
InputStream inputStream;
try {
// inputStream = getResources().openRawResource(R.raw.aa);
// inputStream = new FileInputStream(krcFile);
//延迟看一下加载效果
Thread.sleep(500);
LyricsReader lyricsReader = new LyricsReader();
// byte[] data = new byte[inputStream.available()];
// inputStream.read(data);
// lyricsReader.loadLrc(data, null, krcFile.getName());
lyricsReader.loadLrc(krcFile);
mManyLyricsView.setLyricsReader(lyricsReader);
//
if (mMediaPlayer != null && mMediaPlayer.isPlaying() && mManyLyricsView.getLrcStatus() == ManyLyricsView.LRCSTATUS_LRC && mManyLyricsView.getLrcPlayerStatus() != ManyLyricsView.LRCPLAYERSTATUS_PLAY) {
mManyLyricsView.play(mMediaPlayer.getCurrentPosition());
}
// inputStream.close();
} catch (Exception e) {
mManyLyricsView.setLrcStatus(ManyLyricsView.LRCSTATUS_ERROR);
// Log.e(TAG, e.toString());
e.printStackTrace();
}
inputStream = null;
return null;
}
}.execute("");
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:366)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
Caused by: java.lang.AssertionError: java.util.zip.ZipException: incorrect header check
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:69)
at com.zlm.hp.lyrics.formats.krc.KrcLyricsFileReader.readInputStream(KrcLyricsFileReader.java:85)
at com.zlm.hp.lyrics.formats.LyricsFileReader.readFile(LyricsFileReader.java:34)
at com.zlm.hp.lyrics.LyricsReader.loadLrc(LyricsReader.java:75)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:542)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:520)
at android.os.AsyncTask$2.call(AsyncTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
... 4 more
Caused by: java.util.zip.ZipException: incorrect header check
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:175)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:65)
... 11 more
java.lang.AssertionError: java.util.zip.ZipException: incorrect header check
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:69)
at com.zlm.hp.lyrics.formats.krc.KrcLyricsFileReader.readInputStream(KrcLyricsFileReader.java:85)
at com.zlm.hp.lyrics.formats.LyricsFileReader.readFile(LyricsFileReader.java:34)
at com.zlm.hp.lyrics.LyricsReader.loadLrc(LyricsReader.java:75)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:542)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:520)
at android.os.AsyncTask$2.call(AsyncTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
Caused by: java.util.zip.ZipException: incorrect header check
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:175)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:65)
... 11 more
java.util.zip.ZipException: incorrect header check
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:175)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:65)
at com.zlm.hp.lyrics.formats.krc.KrcLyricsFileReader.readInputStream(KrcLyricsFileReader.java:85)
at com.zlm.hp.lyrics.formats.LyricsFileReader.readFile(LyricsFileReader.java:34)
at com.zlm.hp.lyrics.LyricsReader.loadLrc(LyricsReader.java:75)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:542)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:520)
at android.os.AsyncTask$2.call(AsyncTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
多行字体增大或减小字体后滚动过的字体不会变
目前本版不支持当前行歌词非高亮部分字体自定义颜色,使用的是默认字体颜色,需要从copy ManyLyricsView 源码修改drawDownLyrics 方法 else if (i == curLyricsLineNum) 分支才行,代码如下:
else if (i == curLyricsLineNum) {
//画当前行(动感)歌词
float lineLyricsHLWidth = LyricsUtils.getLineLyricsHLWidth(lyricsReader.getLyricsType(), mCurLineFontPaint, splitLyricsLineInfos.get(i), splitLyricsWordIndex, lyricsWordHLTime);
final int[] curLineColors = mCurLineFontColors == null
? paintColors : mCurLineFontColors;
LyricsUtils.drawDynamicText(canvas, mCurLineFontPaint, paintHL, curLineColors, paintHLColors, text,
lineLyricsHLWidth,
textX, lineBottomY);
}
这个支持文字上面添加拼音嘛
我有这么一个需求,是封面和歌词点击切换,点一下封面显示歌词,点一下歌词显示封面,但是我点击歌词的事件没有响应了,setOnLrcClickListener()方法响应的是点击播放按钮
hello,哥们,你的 2.x和3.0以上版本代码没提交上来么,现在看到所有的歌词还是继承 View呀,另外,哥们可以把你的测试demo的代码也上传上来么,想研究下歌词这块,谢啦~
如 http://music.163.com/api/song/lyric?os=pc&id=461347998&lv=-1&kv=-1&tv=-1 这种带有翻译的歌词,此控件该怎么使用
大神,请问一下 歌词显示竖的怎么破啊?方便加下qq或者wx吗?
动感歌词也是接口吗
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.