Android 歌词Lrc显示 自定义View

本文详细介绍了如何在Android应用中实现自定义Lrc歌词视图,包括解析Lrc文件,绘制歌词行,以及实现滚动效果。通过自定义View,开发者可以灵活地设计歌词界面,提升用户体验。
摘要由CSDN通过智能技术生成

这里写图片描述

package com.louisgeek.louisappbase.custom;

import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import com.louisgeek.checkappupdatelib.tool.HttpTool;
import com.louisgeek.louisappbase.musicplayer.LrcHelper;
import com.louisgeek.louisappbase.musicplayer.bean.LrcLineBean;
import com.louisgeek.louisappbase.util.FileTool;
import com.louisgeek.louisappbase.util.RawUtil;
import com.socks.library.KLog;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by louisgeek on 2016/11/26.
 */

public class KooLrcView extends View {
   
    private Context mContext;
    private Paint mPaint;
    private List<LrcLineBean> mLrcAllLineBeanList=new ArrayList<>();
    private int mNowPlayLinePos;
    private float mTextHeight;
    private float mAnimateChangeY;
    private int mViewWidth, mViewHeight;
    private float mTextCenterY;//baseline和文字中线的偏移  0,0时  就是y
    private float mTextLineDis = 20;//行距
    private float mHighLightTextCenterY;//画高亮文字的起始Y
    private float mTextSize = 35;
    private int mNormalTextColor = Color.GRAY;
    private int mHighLightTextColor = Color.GREEN;
    private int mUpOrDownViewCanDrawLines;//

    public KooLrcView(Context context) {
        this(context, null);
    }

    public KooLrcView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public KooLrcView(Context context, AttributeSet attrs, int defStyleAttr) {
        
要在Android Studio中显示LRC歌词文件,可以按照以下步骤进行操作: 1.在布局文件中添加一个TextView,用于显示歌词。 2.在Java代码中读取LRC文件并将其解析为Map,其中键为时间戳,值为歌词文本。 3.在MediaPlayer的OnPreparedListener中启动一个线程,该线程将定期更新TextView显示当前播放时间的歌词。 下面是一个简单的示例代码,可以帮助你实现这个功能: ```java // 在布局文件中添加一个TextView,用于显示歌词 TextView lrcTextView = findViewById(R.id.lrcTextView); // 在Java代码中读取LRC文件并将其解析为Map Map<Long, String> lrcMap = new HashMap<>(); try { BufferedReader br = new BufferedReader(new FileReader(lrcFile)); String line; while ((line = br.readLine()) ! null) { Matcher matcher = Pattern.compile("\\[(\\d{2}):(\\d{2})\\.(\\d{2})\\](.*)").matcher(line); if (matcher.find()) { long time = Long.parseLong(matcher.group(1)) * 60 * 1000 + Long.parseLong(matcher.group(2)) * 1000 + Long.parseLong(matcher.group(3)) * 10; String text = matcher.group(4); lrcMap.put(time, text); } } br.close(); } catch (IOException e) { e.printStackTrace(); } // 在MediaPlayer的OnPreparedListener中启动一个线程,该线程将定期更新TextView显示当前播放时间的歌词 MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { new Thread(new Runnable() { @Override public void run() { while (mediaPlayer.isPlaying()) { long time = mediaPlayer.getCurrentPosition(); if (lrcMap.containsKey(time)) { runOnUiThread(new Runnable() { @Override public void run() { lrcTextView.setText(lrcMap.get(time)); } }); } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } }); // 播放音乐 mediaPlayer.setDataSource(audioFile); mediaPlayer.prepare(); mediaPlayer.start(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值