|
@@ -1,19 +1,24 @@
|
|
|
package com.xunao.effectdemo.activity;
|
|
|
|
|
|
+import android.annotation.SuppressLint;
|
|
|
import android.app.Activity;
|
|
|
import android.graphics.Color;
|
|
|
import android.media.MediaPlayer;
|
|
|
import android.os.Bundle;
|
|
|
+import android.os.Handler;
|
|
|
+import android.os.Message;
|
|
|
import android.util.Log;
|
|
|
import android.view.LayoutInflater;
|
|
|
import android.view.View;
|
|
|
import android.widget.Button;
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
+import androidx.annotation.NonNull;
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
|
|
import com.xunao.effectdemo.R;
|
|
|
import com.xunao.effectdemo.bean.MediaBean;
|
|
|
+import com.xunao.effectdemo.bean.WordTimeBean;
|
|
|
import com.xunao.effectdemo.net.ApiHttpClient;
|
|
|
import com.xunao.effectdemo.net.ApiUrl;
|
|
|
import com.xunao.effectdemo.net.CSMHttpCallback;
|
|
@@ -24,6 +29,9 @@ import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Timer;
|
|
|
+import java.util.TimerTask;
|
|
|
+
|
|
|
import com.xunao.effectdemo.bean.MediaBean.ResultBean.ListBean.*;
|
|
|
import com.zhy.view.flowlayout.FlowLayout;
|
|
|
import com.zhy.view.flowlayout.TagAdapter;
|
|
@@ -63,6 +71,9 @@ public class NewSongLyricActivity extends Activity {
|
|
|
private String[] lyricList;
|
|
|
private List<StepsLyricjsonBean> wordList = new ArrayList<>();
|
|
|
private List<String> list = new ArrayList<>();
|
|
|
+ private List<String> timeList = new ArrayList<>();
|
|
|
+ private List<WordTimeBean> beanList = new ArrayList<>();
|
|
|
+ private WordTimeBean timeBean,currBean;
|
|
|
|
|
|
@Override
|
|
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
|
@@ -76,16 +87,17 @@ public class NewSongLyricActivity extends Activity {
|
|
|
start = findViewById(R.id.start);
|
|
|
stop = findViewById(R.id.end);
|
|
|
start.setOnClickListener(v->{
|
|
|
-// if(mediaPlayer.isPlaying()){
|
|
|
-// mediaPlayer.seekTo(0);
|
|
|
-// }else{
|
|
|
-// mediaPlayer.start();
|
|
|
-// }
|
|
|
+ if(mediaPlayer.isPlaying()){
|
|
|
+ mediaPlayer.seekTo(0);
|
|
|
+ }else{
|
|
|
+ mediaPlayer.start();
|
|
|
+ }
|
|
|
startPlay();
|
|
|
});
|
|
|
stop.setOnClickListener(v->{
|
|
|
mediaPlayer.pause();
|
|
|
- textView.stopPlay();
|
|
|
+// textView.stopPlay();
|
|
|
+ handler.removeCallbacks(runnable);
|
|
|
});
|
|
|
mediaPlayer = new MediaPlayer();
|
|
|
flowLayout = findViewById(R.id.tab_flowlayout);
|
|
@@ -127,47 +139,93 @@ public class NewSongLyricActivity extends Activity {
|
|
|
String msg = "";
|
|
|
list.clear();
|
|
|
for (StepsLyricjsonBean bean:wordList) {
|
|
|
- for (String w:
|
|
|
- bean.getWord()) {
|
|
|
|
|
|
- w = w.replaceAll("<i>","\n ");
|
|
|
+ for (int i = 0; i < bean.getWord().size(); i++) {
|
|
|
+ String w = bean.getWord().get(i).replaceAll("<i>","\n ");
|
|
|
+ if (w.contains("\n"))Log.e("MyTag","长度"+w.length());
|
|
|
list.add(w);
|
|
|
+ timeList.add(bean.getWordtims().get(i));
|
|
|
+
|
|
|
+ timeBean = new WordTimeBean();
|
|
|
+ timeBean.setStartTime(Integer.parseInt(bean.getStarttime()));
|
|
|
+ timeBean.setEndTime(Integer.parseInt(bean.getEndtime()));
|
|
|
+ timeBean.setWord(w);
|
|
|
+ timeBean.setTime(Integer.parseInt(bean.getWordtims().get(i)));
|
|
|
+ beanList.add(timeBean);
|
|
|
+
|
|
|
msg+=w;
|
|
|
}
|
|
|
}
|
|
|
textView.setText(msg);
|
|
|
setFlowData();
|
|
|
}
|
|
|
-
|
|
|
- void startPlay(){
|
|
|
- String[] lyricList = lyric.split("\n");
|
|
|
- int startIndex = 0;
|
|
|
- long delayTime = 0L;
|
|
|
-// text.startPlayLine(
|
|
|
-// 0,
|
|
|
-// lyric.length,
|
|
|
-// 5000
|
|
|
-// )
|
|
|
- for (String s : lyricList) {
|
|
|
- int startIndexTemp = startIndex;
|
|
|
- long duration = 1000;
|
|
|
- textView.postDelayed(
|
|
|
- new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- textView.startPlayLine(
|
|
|
- startIndexTemp,
|
|
|
- startIndexTemp + s.length() + 1, // 因为有个换行符,所以 + 1
|
|
|
- 0);
|
|
|
+ private int num = 0;
|
|
|
+ private int canTime = 0;
|
|
|
+ private int normal = 0;
|
|
|
+ private Handler handler = new Handler(){
|
|
|
+ @SuppressLint("HandlerLeak")
|
|
|
+ @Override
|
|
|
+ public void handleMessage(@NonNull Message msg) {
|
|
|
+ super.handleMessage(msg);
|
|
|
+ switch (msg.what){
|
|
|
+ case 1001:
|
|
|
+ if (currBean==null){timeBean = beanList.get(num);}
|
|
|
+// Log.e("MyTag","当前:"+timeBean.toString()+" "+time);
|
|
|
+ if (timeBean.getStartTime()+canTime > time&& timeBean.getStartTime() + canTime-time <100){
|
|
|
+ num++;
|
|
|
+ if (num==beanList.size()){
|
|
|
+ num = 0;
|
|
|
}
|
|
|
- },
|
|
|
- 0
|
|
|
- );
|
|
|
- delayTime += duration + 50;
|
|
|
- startIndex += s.length() + 1;
|
|
|
+ if (timeBean.getTime()+timeBean.getStartTime()+canTime == timeBean.getEndTime()){
|
|
|
+ canTime =0;
|
|
|
+// normal = startIndex;
|
|
|
+// textView.startNormalLine(
|
|
|
+// 0,
|
|
|
+// startIndex);
|
|
|
+ }else{
|
|
|
+ canTime +=timeBean.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ textView.startPlayLine(
|
|
|
+ startIndex,
|
|
|
+ startIndex + timeBean.getWord().length(), // 因为有个换行符,所以 + 1
|
|
|
+ 1);
|
|
|
+ startIndex += timeBean.getWord().length();
|
|
|
+ timeBean = beanList.get(num);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
+ };
|
|
|
+ int startIndex = 0;
|
|
|
+ long delayTime = 0L;
|
|
|
+
|
|
|
+ void startPlay(){
|
|
|
+// String[] lyricList = lyric.split("\n");
|
|
|
+ handler.post(runnable);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ Timer timer;
|
|
|
+ int time = 0;
|
|
|
+ private Runnable runnable = new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ timer=new Timer();
|
|
|
+ timer.schedule(new TimerTask() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ //定义一个消息传过去
|
|
|
+ Message msg=new Message();
|
|
|
+ msg.what=1001;
|
|
|
+ handler.sendMessage(msg);
|
|
|
+ time+=50;
|
|
|
+ }
|
|
|
+ },0,50); //延时0毫秒开始计时,每隔1秒计时一
|
|
|
+ //次
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
@Override
|
|
|
protected void onDestroy() {
|
|
|
super.onDestroy();
|