From 14c85c581f398088e14ace348c87fced87dcf0b6 Mon Sep 17 00:00:00 2001 From: jsyjst Date: Mon, 7 Oct 2019 21:02:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=B7=B1=E7=9A=84?= =?UTF-8?q?=E6=AD=8C=E8=AF=8D=E4=BE=9D=E8=B5=96=E5=BA=93LrcView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + .../musicplayer/view/PlayActivity.java | 8 +- .../example/musicplayer/widget/LrcView.java | 192 ------------------ app/src/main/res/layout/activity_play.xml | 6 +- app/src/main/res/values/attrs.xml | 8 - config.gradle | 2 + 6 files changed, 9 insertions(+), 208 deletions(-) delete mode 100644 app/src/main/java/com/example/musicplayer/widget/LrcView.java diff --git a/app/build.gradle b/app/build.gradle index e2912bd..8015a55 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -65,6 +65,7 @@ dependencies { implementation rootProject.ext.dependencies["ripple"] //水波纹按钮 implementation rootProject.ext.dependencies["avi"] //加载动画 implementation rootProject.ext.dependencies["speedDialog"] + implementation rootProject.ext.dependencies["lrcView"]//歌词 diff --git a/app/src/main/java/com/example/musicplayer/view/PlayActivity.java b/app/src/main/java/com/example/musicplayer/view/PlayActivity.java index a26f87b..32730f7 100644 --- a/app/src/main/java/com/example/musicplayer/view/PlayActivity.java +++ b/app/src/main/java/com/example/musicplayer/view/PlayActivity.java @@ -38,6 +38,7 @@ import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.transition.Transition; +import com.example.library.view.LrcView; import com.example.musicplayer.R; import com.example.musicplayer.app.Api; import com.example.musicplayer.app.Constant; @@ -61,7 +62,6 @@ import com.example.musicplayer.util.MediaUtil; import com.example.musicplayer.util.ScreenUtil; import com.example.musicplayer.widget.BackgroundAnimationRelativeLayout; import com.example.musicplayer.widget.DiscView; -import com.example.musicplayer.widget.LrcView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -636,10 +636,8 @@ public class PlayActivity extends BaseMvpActivity implements IPla public void showLrc(final String lrc) { mDisc.setVisibility(View.GONE); mLrcView.setVisibility(View.VISIBLE); - mLrcView.setLrc(lrc); - mLrcView.setHighLineColor(getResources().getColor(R.color.musicStyle)); - mLrcView.setPlayer(mPlayStatusBinder.getMediaPlayer()); - mLrcView.init(); + Log.d(TAG, "showLrc: "+mPlayStatusBinder.getMediaPlayer().getCurrentPosition()); + mLrcView.setLrc(lrc).setPlayer(mPlayStatusBinder.getMediaPlayer()).draw(); } diff --git a/app/src/main/java/com/example/musicplayer/widget/LrcView.java b/app/src/main/java/com/example/musicplayer/widget/LrcView.java deleted file mode 100644 index b929a89..0000000 --- a/app/src/main/java/com/example/musicplayer/widget/LrcView.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.example.musicplayer.widget; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.media.MediaPlayer; -import android.util.AttributeSet; -import android.view.View; - -import com.example.musicplayer.R; -import com.example.musicplayer.entiy.LrcBean; -import com.example.musicplayer.util.LrcUtil; - -import java.util.List; - -/** - *
- *     author : 残渊
- *     time   : 2019/03/18
- *     desc   : 自定义歌词界面
- * 
- */ - -public class LrcView extends View { - - private List list; //歌词列表 - private Paint gPaint; //静态歌词画笔 - private Paint hPaint; //动态歌词画笔 - private int width = 0, height = 0; - private int currentPosition = 0; //歌曲播放的位置 - private MediaPlayer player; - private int lastPosition = 0; - private int highLineColor; //播放歌词的颜色 - private int lrcTextSize; //歌词大小 - private int lrcColor; //歌词颜色 - private int mode = 0; - public final static int KARAOKE = 1; - - public void setHighLineColor(int highLineColor) { - this.highLineColor = highLineColor; - } - - public void setLrcColor(int lrcColor) { - this.lrcColor = lrcColor; - } - - public void setMode(int mode) { - this.mode = mode; - } - - public void setPlayer(MediaPlayer player) { - this.player = player; - } - - /** - * @param lrc 标准歌词字符串 - */ - public void setLrc(String lrc) { - list = LrcUtil.parseStr2List(lrc); - } - - public LrcView(Context context) { - this(context, null); - } - - public LrcView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public LrcView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.LrcView); - highLineColor = ta.getColor(R.styleable.LrcView_hignLineColor, getResources().getColor(R.color.green)); - lrcColor = ta.getColor(R.styleable.LrcView_lrcColor, getResources().getColor(android.R.color.darker_gray)); - float densityText = getResources().getDisplayMetrics().scaledDensity; - lrcTextSize = ta.getDimensionPixelSize(R.styleable.LrcView_lrcTextSize,(int)(16*densityText)); - mode = ta.getInt(R.styleable.LrcView_lrcMode,mode); - ta.recycle(); - gPaint = new Paint(); - gPaint.setAntiAlias(true); - gPaint.setColor(lrcColor); - gPaint.setTextSize(lrcTextSize); - gPaint.setTextAlign(Paint.Align.CENTER); - hPaint = new Paint(); - hPaint.setAntiAlias(true); - hPaint.setColor(highLineColor); - hPaint.setTextSize(lrcTextSize); - hPaint.setTextAlign(Paint.Align.CENTER); - } - - @Override - protected void onDraw(Canvas canvas) { - if (width == 0 || height == 0) { - width = getMeasuredWidth(); - height = getMeasuredHeight(); - } - if (list == null || list.size() == 0) { - canvas.drawText("暂无歌词", width / 2, height / 2, gPaint); - return; - } - - getCurrentPosition(); - int currentMillis = player.getCurrentPosition(); - drawLrc2(canvas, currentMillis); - long start = list.get(currentPosition).getStart(); - float v = (currentMillis - start) > 500 ? currentPosition * 120 : lastPosition * 120 + (currentPosition - lastPosition) * 120 * ((currentMillis - start) / 500f); - setScrollY((int) v); - if (getScrollY() == currentPosition * 120) { - lastPosition = currentPosition; - } - postInvalidateDelayed(100); - } - - private void drawLrc2(Canvas canvas, int currentMillis) { - if (mode == 0) { - for (int i = 0; i < list.size(); i++) { - if (i == currentPosition) { - canvas.drawText(list.get(i).getLrc(), width / 2, height / 2 + 120 * i, hPaint); - } else { - canvas.drawText(list.get(i).getLrc(), width / 2, height / 2 + 120 * i, gPaint); - } - } - }else{ - for (int i = 0; i < list.size(); i++) { - canvas.drawText(list.get(i).getLrc(), width / 2, height / 2 + 80 * i, gPaint); - } - String highLineLrc = list.get(currentPosition).getLrc(); - int highLineWidth = (int) gPaint.measureText(highLineLrc); - int leftOffset = (width - highLineWidth) / 2; - LrcBean lrcBean = list.get(currentPosition); - long start = lrcBean.getStart(); - long end = lrcBean.getEnd(); - int i = (int) ((currentMillis - start) * 1.0f / (end - start) * highLineWidth); - if (i > 0) { - Bitmap textBitmap = Bitmap.createBitmap(i, 80, Bitmap.Config.ARGB_8888); - Canvas textCanvas = new Canvas(textBitmap); - textCanvas.drawText(highLineLrc, highLineWidth / 2, 80, hPaint); - canvas.drawBitmap(textBitmap, leftOffset, height / 2 + 80 * (currentPosition - 1), null); - } - } - } - - public void init() { - currentPosition = 0; - lastPosition = 0; - setScrollY(0); - invalidate(); - } - - private void drawLrc1(Canvas canvas) { - String text = list.get(currentPosition).getLrc(); - canvas.drawText(text, width / 2, height / 2, hPaint); - - for (int i = 1; i < 10; i++) { - int index = currentPosition - i; - if (index > -1) { - canvas.drawText(list.get(index).getLrc(), width / 2, height / 2 - 100 * i, gPaint); - } - } - for (int i = 1; i < 10; i++) { - int index = currentPosition + i; - if (index < list.size()) { - canvas.drawText(list.get(index).getLrc(), width / 2, height / 2 + 100 * i, gPaint); - } - } - } - - private void getCurrentPosition() { - try { - int currentMillis = player.getCurrentPosition(); - if (currentMillis < list.get(0).getStart()) { - currentPosition = 0; - return; - } - if (currentMillis > list.get(list.size() - 1).getStart()) { - currentPosition = list.size() - 1; - return; - } - for (int i = 0; i < list.size(); i++) { - if (currentMillis >= list.get(i).getStart() && currentMillis < list.get(i).getEnd()) { - currentPosition = i; - return; - } - } - } catch (Exception e) { - postInvalidateDelayed(100); - } - } -} diff --git a/app/src/main/res/layout/activity_play.xml b/app/src/main/res/layout/activity_play.xml index 9bf6280..49a6f02 100644 --- a/app/src/main/res/layout/activity_play.xml +++ b/app/src/main/res/layout/activity_play.xml @@ -60,7 +60,7 @@ android:layout_below="@+id/relative_song" android:background="#33ffffff" /> - - - - - - - - - diff --git a/config.gradle b/config.gradle index 54605ac..8140734 100644 --- a/config.gradle +++ b/config.gradle @@ -39,6 +39,7 @@ ext { Avi : '2.1.3', Ripple : '1.3.1', SpeedDialog : 'support-1.0.0', + LrcView : 'LrcView-1.1', //数据库 LitePal : "3.0.0", @@ -80,6 +81,7 @@ ext { ripple : "com.patrickpissurno:ripple-effect:${version.Ripple}", avi : "com.wang.avi:library:${version.Avi}", speedDialog : "com.github.jsyjst:Yuan-SpeedDialog:${version.SpeedDialog}", + lrcView : "com.github.jsyjst:Yuan-LrcView:${version.LrcView}", //数据库 litePal : "org.litepal.android:java:${version.LitePal}",