From 27f180efca808046df3f3e917ee5f98d2d54849b Mon Sep 17 00:00:00 2001
From: Runt <qingingrunt2010@qq.com>
Date: Wed, 04 May 2022 13:57:34 +0000
Subject: [PATCH] 滑动歌词 计算时间
---
app/src/main/java/com/auto/lyric/data/LyricObject.java | 10 +++++
app/src/main/java/com/auto/lyric/data/LyricServer.java | 1
app/src/main/java/com/auto/lyric/service/FloatingWindowService.java | 31 +++++++++++++++
app/src/main/java/com/auto/lyric/widgets/LyricView.java | 41 ++++++++------------
4 files changed, 58 insertions(+), 25 deletions(-)
diff --git a/app/src/main/java/com/auto/lyric/data/LyricObject.java b/app/src/main/java/com/auto/lyric/data/LyricObject.java
index d8379d7..5149137 100644
--- a/app/src/main/java/com/auto/lyric/data/LyricObject.java
+++ b/app/src/main/java/com/auto/lyric/data/LyricObject.java
@@ -8,4 +8,14 @@
public int endtime; // 结束时间
public int timeline; // 单句歌词用时
public String lrc; // 单句歌词
+
+ @Override
+ public String toString() {
+ return "LyricObject{" +
+ "begintime=" + begintime +
+ ", endtime=" + endtime +
+ ", timeline=" + timeline +
+ ", lrc='" + lrc + '\'' +
+ '}';
+ }
}
diff --git a/app/src/main/java/com/auto/lyric/data/LyricServer.java b/app/src/main/java/com/auto/lyric/data/LyricServer.java
index 8b8ef7e..2741d2c 100644
--- a/app/src/main/java/com/auto/lyric/data/LyricServer.java
+++ b/app/src/main/java/com/auto/lyric/data/LyricServer.java
@@ -18,6 +18,7 @@
public class LyricServer {
+ // key 时间戳 , obj 歌词
private static TreeMap<Integer, LyricObject> lrc_map = new TreeMap<>();
public static TreeMap<Integer, LyricObject> getLrc_map() {
diff --git a/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java b/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java
index 426ee8c..ed45dd9 100644
--- a/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java
+++ b/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java
@@ -22,6 +22,7 @@
import androidx.annotation.Nullable;
import com.auto.lyric.R;
+import com.auto.lyric.data.LyricObject;
import com.auto.lyric.data.LyricServer;
import com.auto.lyric.databinding.FloatViewBinding;
import com.auto.lyric.util.DeviceUtil;
@@ -195,6 +196,36 @@
Log.e(TAG,"onStartCommand flags:"+flags+" startId:"+startId+ " intent:"+intent);
manager.addView(binding.getRoot(),params);
binding.lyric.setTextSize();
+ binding.lyric.setOnTouchListener(new View.OnTouchListener() {
+ float touchY; //当触摸歌词View时,保存为当前触点的Y轴坐标
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ float tt=event.getY();
+ switch(event.getAction()){
+ case MotionEvent.ACTION_DOWN:
+ break;
+ case MotionEvent.ACTION_MOVE:
+ touchY=tt-touchY;
+ binding.lyric.setOffsetY(binding.lyric.getOffsetY()+touchY);
+ Log.e("LyricView","offsety:"+binding.lyric.getOffsetY());
+ binding.lyric.invalidate();
+ break;
+ case MotionEvent.ACTION_UP:
+ if(binding.btnStart.getText().equals("开启") || pause) {
+ int index = binding.lyric.getIndexFromOffsetY(binding.lyric.getOffsetY());
+ binding.lyric.setIndex(index);
+ binding.lyric.setOffsetY(220 - index * (binding.lyric.getSIZEWORD() + 44));
+ LyricObject object = LyricServer.getLrc_map().get(index);
+ Log.e("LyricView", "object:" + object);
+ progress = object.begintime;
+ binding.lyric.invalidate();
+ }
+ break;
+ }
+ touchY=tt;
+ return true;
+ }
+ });
return super.onStartCommand(intent, flags, startId);
}
diff --git a/app/src/main/java/com/auto/lyric/widgets/LyricView.java b/app/src/main/java/com/auto/lyric/widgets/LyricView.java
index 864d1f2..77d8a77 100644
--- a/app/src/main/java/com/auto/lyric/widgets/LyricView.java
+++ b/app/src/main/java/com/auto/lyric/widgets/LyricView.java
@@ -6,7 +6,6 @@
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
-import android.view.MotionEvent;
import com.auto.lyric.data.LyricObject;
import com.auto.lyric.data.LyricServer;
@@ -21,7 +20,6 @@
private float mX; //屏幕X轴的中点,此值固定,保持歌词在X中间显示
private float offsetY; //歌词在Y轴上的偏移量,此值会根据歌词的滚动变小
- private float touchY; //当触摸歌词View时,保存为当前触点的Y轴坐标
private int lrcIndex=0; //保存歌词TreeMap的下标
private int SIZEWORD=0;//显示歌词文字的大小值
private int INTERVAL=45;//歌词每行的间隔
@@ -70,29 +68,6 @@
canvas.drawText("找不到歌词", mX, 310, paint);
}
super.onDraw(canvas);
- }
-
- /* (non-Javadoc)
- * @see android.view.View#onTouchEvent(android.view.MotionEvent)
- */
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- // TODO Auto-generated method stub
- float tt=event.getY();
- switch(event.getAction()){
- case MotionEvent.ACTION_DOWN:
- break;
- case MotionEvent.ACTION_MOVE:
- touchY=tt-touchY;
- offsetY=offsetY+touchY;
- Log.e("LyricView","offsety:"+offsetY);
- invalidate();
- break;
- case MotionEvent.ACTION_UP:
- break;
- }
- touchY=tt;
- return true;
}
public void init(){
@@ -177,6 +152,9 @@
return lrcIndex;
}
+ public void setIndex(int lrcIndex) {
+ this.lrcIndex = lrcIndex;
+ }
/**
* @return the offsetY
@@ -206,4 +184,17 @@
public void setSIZEWORD(int sIZEWORD) {
SIZEWORD = sIZEWORD;
}
+
+ public int getIndexFromOffsetY(float offsetY){
+ //220 - index * (binding.lyric.getSIZEWORD() + 44)
+ int index = (int) ((220 - offsetY) / (SIZEWORD + 44));
+ Log.i("LyricView", "getIndexFromOffsetY index:"+index);
+ if(LyricServer.getLrc_map().keySet().size()>index){
+ return index;
+ }else if(index < 0){
+ return 0;
+ }else{
+ return LyricServer.getLrc_map().keySet().size() -1;
+ }
+ }
}
--
Gitblit v1.9.1