android开发歌词滑动效果_android实现歌词自动滚动效果

最近在做Android 的MP3播放的项目,要实现歌词的自动滚动,以及同步显示。

lyric的歌词解析主要用yoyoplayer里面的,显示部分参考了这里 ,这里只是模拟MP3歌词的滚动。

先上一下效果图:

滚动实现的代码其实也简单。显示画出当前时间点的歌词,然后再分别画出改歌词后面和前面的歌词,前面的部分往上推移,后面的部分往下推移,这样就保持了当前时间歌词在中间。

代码如下 LyricView,相关信息在注释了标明了。

package ru.org.piaozhiye.lyric;

import java.io.File;

import java.util.List;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Path;

import android.graphics.Typeface;

import android.util.AttributeSet;

import android.widget.TextView;

/**

* @author root

*

*/

public class LyricView extends TextView {

private Paint mPaint;

private float mX;

private static Lyric mLyric;

private Paint mPathPaint;

public String test = "test";

public int index = 0;

private List list;

public float mTouchHistoryY;

private int mY;

private long currentDunringTime; // 当前行歌词持续的时间,用该时间来sleep

private float middleY;// y轴中间

private static

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 Android 的自定义 View 来实现漂亮的歌词滑动效果。以下是一个简单的实现步骤: 1. 创建自定义 View,继承自 View 或其子类。 2. 在 onDraw() 方法中绘制歌词。 3. 在 onMeasure() 方法中计算 View 的尺寸。 4. 在 onTouchEvent() 方法中处理触摸事件,实现歌词滑动效果。 5. 在 onDetachedFromWindow() 方法中释放资源。 以下是一个示例代码,仅供参考: ```java public class LyricView extends View { private static final String TAG = "LyricView"; private Paint mPaint; // 画笔 private List<String> mLyrics; // 歌词列表 private int mCurrentLine = 0; // 当前行 private int mLineHeight; // 行高 private int mMaxScroll; // 最大滚动距离 private int mScrollY; // 当前滚动距离 public LyricView(Context context) { super(context); init(); } public LyricView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public LyricView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setTextSize(36); mPaint.setColor(Color.WHITE); mPaint.setTextAlign(Paint.Align.CENTER); mLineHeight = (int) (mPaint.getFontMetrics().bottom - mPaint.getFontMetrics().top); } public void setLyrics(List<String> lyrics) { mLyrics = lyrics; mMaxScroll = (mLyrics.size() - 1) * mLineHeight; mCurrentLine = 0; mScrollY = 0; invalidate(); } @Override protected void onDraw(Canvas canvas) { if (mLyrics == null || mLyrics.isEmpty()) { return; } int centerY = getHeight() / 2; for (int i = 0; i < mLyrics.size(); i++) { String line = mLyrics.get(i); int y = centerY + (i - mCurrentLine) * mLineHeight - mScrollY; if (y < 0) { continue; } if (y > getHeight() + mLineHeight) { break; } canvas.drawText(line, getWidth() / 2, y, mPaint); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(width, height); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 停止自动滚动 break; case MotionEvent.ACTION_MOVE: int deltaY = (int) event.getY() - mLastY; mScrollY += deltaY; mScrollY = Math.max(0, mScrollY); mScrollY = Math.min(mMaxScroll, mScrollY); invalidate(); break; case MotionEvent.ACTION_UP: // 开始自动滚动 break; } mLastY = (int) event.getY(); return true; } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); // 释放资源 } } ``` 使用时,您可以将 LyricView 添加到您的布局文件中,并调用 setLyrics() 方法设置歌词列表即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值