android动手写平滑滚动歌词控件

本文介绍了如何在Android中实现一个平滑滚动的歌词控件LrcView。作者通过解析LRC文件,动态更新歌词,并利用Scroller实现平滑滚动效果。控件配置简单,支持歌词同步和切换滑动效果,适用于音乐播放应用。
摘要由CSDN通过智能技术生成

 

马上毕业了,前段时间一直忙自己的毕业设计和毕业论文,做的是一个android音乐播放器,今天特意抽出里面的一块功能来凑这篇博客--歌词的显示。
看看QQ音乐,歌词显示略屌,可惜我们的LRC文件并不能做到词的同步,只能做到行的同步,所以,退而求之,今天的歌词空间只是同步行,那他有什么功能呢? 歌词同步就不说了,切换滑动效果是我后加上的,因为我看着一行行的切换太过生硬。
下面开始进入主题。

 

1、首先我们来看看如何使用,控件的使用很简单,可以在xml中配置使用:

 

<org.loader.liteplayer.ui.LrcView
        xmlns:lrc="http://schemas.android.com/apk/res/org.loader.liteplayer"
        android:id="@+id/play_first_lrc_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        lrc:textSize="18sp"
        lrc:normalTextColor="@android:color/white"
        lrc:currentTextColor="@color/main"
        lrc:dividerHeight="20dp"
        lrc:rows="9" />


这里我们来看看几个以lrc为命名空间的配置项。
textSize不用多说,肯定是文本的大小了;normalTextColor是普通文本的颜色,因为歌词分为普通的行和当前高亮行,那currentTextColor肯定是高亮行的颜色了;dividerHeight是行间距;rows是显示多少行歌词,在该配置文件中是显示9行的歌词。配置好了,我们需要在activity或者fragment中来使用它。

 

 

 

 

...
mLrcViewOnSecondPage = (LrcView) lrcView.findViewById(R.id.play_first_lrc_2);
...
mLrcViewOnSecondPage.setLrcPath(lrcPath);
...

@Override
public void onPublish(int progress) {
	if(mLrcViewOnSecondPage.hasLrc()) mLrcViewOnSecondPage.changeCurrent(progress);
}

 

 

第一行代码去获取该控件,接着调用setLrcPath将歌词文件加载到内存中,在onPushlish方法中不断调用changeCurrent来更新歌词,那changeCurrent的参数哪来的呢?这个是音乐播放回调的进度,到这里,可能会有大神出疑问了, 这样做是不是会不断的更新歌词控件?就算当前没有切换歌词也回去更新? 这里先给出回答:当然不是了,我们在changeCurrent方法中做了判断,所以这里尽管调用,放心调用!


那接下来,我们开始进入今天的主题:LrcView。


在进入代码之前,先来看看我的设计思路吧:
当我们传进一个lrc文件的path,首先按照行去read文件,并且利用正则解析出时间和歌词分别存放。设置完歌词后,我们通过不断调用changeCurrent()方法来切换歌词,那么changeCurrent又负责了什么工作呢? 在changeCurrent中首先判断下一行开始的时间是不是大于当前传进来的时间,如果是,直接返回,否则,遍历所有的时间,找到大于当前时间的上一行的key, 再次通过key找到歌词,咔咔咔, 显示出来就ok了。


look code:

 

public class LrcView extends View {
	private static final int SCROLL_TIME = 500;
	private static final String DEFAULT_TEXT = "暂无歌词";
	
	private List<String> mLrc
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亓斌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值