NewSongLyricActivity.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package com.xunao.effectdemo.activity;
  2. import android.app.Activity;
  3. import android.graphics.Color;
  4. import android.media.MediaPlayer;
  5. import android.os.Bundle;
  6. import android.util.Log;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.widget.Button;
  10. import android.widget.TextView;
  11. import androidx.annotation.Nullable;
  12. import com.xunao.effectdemo.R;
  13. import com.xunao.effectdemo.bean.MediaBean;
  14. import com.xunao.effectdemo.net.ApiHttpClient;
  15. import com.xunao.effectdemo.net.ApiUrl;
  16. import com.xunao.effectdemo.net.CSMHttpCallback;
  17. import com.xunao.effectdemo.view.SongLyricTextView;
  18. import java.io.IOException;
  19. import java.util.ArrayList;
  20. import java.util.HashMap;
  21. import java.util.List;
  22. import java.util.Map;
  23. import com.xunao.effectdemo.bean.MediaBean.ResultBean.ListBean.*;
  24. import com.zhy.view.flowlayout.FlowLayout;
  25. import com.zhy.view.flowlayout.TagAdapter;
  26. import com.zhy.view.flowlayout.TagFlowLayout;
  27. /**
  28. * author : 程中强
  29. * e-mail : 740479946@qq.com
  30. * date : 2022/9/2214:43
  31. * desc :
  32. * version: 1.0
  33. */
  34. public class NewSongLyricActivity extends Activity {
  35. private SongLyricTextView textView;
  36. private Button start,stop;
  37. private MediaPlayer mediaPlayer;
  38. private String TAG = "NewSongLyricActivity";
  39. private TagFlowLayout flowLayout;
  40. private String lyric = "你发如雪\n" +
  41. "凄美了离别\n" +
  42. "我焚香感动了谁\n" +
  43. "邀明月让回忆皎洁\n" +
  44. "爱在月光下完美\n" +
  45. "你发如雪\n" +
  46. "纷飞了眼泪\n" +
  47. "我等待苍老了谁\n" +
  48. "红尘醉微醺的岁月\n" +
  49. "我用无悔\n" +
  50. "刻永世爱你的碑";
  51. private String token = "MWIzYmVmOTdiYzI5Y2UwM2ZiOThlMTI3YjRmYWJlNzA=";
  52. private String member_id = "61128";
  53. private String steps_id = "48671";
  54. private String student_id = "180721";
  55. private String[] lyricList;
  56. private List<StepsLyricjsonBean> wordList = new ArrayList<>();
  57. private List<String> list = new ArrayList<>();
  58. @Override
  59. protected void onCreate(@Nullable Bundle savedInstanceState) {
  60. super.onCreate(savedInstanceState);
  61. setContentView(R.layout.activity_songe);
  62. init();
  63. }
  64. void init(){
  65. textView = findViewById(R.id.text);
  66. start = findViewById(R.id.start);
  67. stop = findViewById(R.id.end);
  68. start.setOnClickListener(v->{
  69. // if(mediaPlayer.isPlaying()){
  70. // mediaPlayer.seekTo(0);
  71. // }else{
  72. // mediaPlayer.start();
  73. // }
  74. startPlay();
  75. });
  76. stop.setOnClickListener(v->{
  77. mediaPlayer.pause();
  78. textView.stopPlay();
  79. });
  80. mediaPlayer = new MediaPlayer();
  81. flowLayout = findViewById(R.id.tab_flowlayout);
  82. getMedia();
  83. // setFlowData();
  84. }
  85. void getMedia(){
  86. Map<String, String> params = new HashMap<>();
  87. params.put("member_id",member_id);
  88. params.put("token",token);
  89. params.put("student_id",student_id);
  90. params.put("steps_id",steps_id);
  91. ApiHttpClient.get(ApiUrl.getMapsStepsMedias,params, new CSMHttpCallback() {
  92. @Override
  93. protected void onSuccess(String jsonStr) {
  94. MediaBean mediaBean = MediaBean.parse(jsonStr);
  95. wordList = mediaBean.getResult().getList().getSteps_lyricjson();
  96. setWord(wordList);
  97. mediaPlayer.setOnPreparedListener(mp -> Log.i(TAG,"onPrepared:准备完成"));
  98. mediaPlayer.setOnCompletionListener(mp -> Log.i(TAG,"OnCompletion:播放完成"));
  99. try {
  100. mediaPlayer.setDataSource(mediaBean.getResult().getList().getSteps_mp3url());
  101. mediaPlayer.prepareAsync();// 开始在后台缓冲音频文件并返回
  102. } catch (IOException e) {
  103. e.printStackTrace();
  104. }
  105. }
  106. @Override
  107. protected void onFail(String msg) {
  108. }
  109. });
  110. }
  111. private void setWord(List<StepsLyricjsonBean> wordList){
  112. String msg = "";
  113. list.clear();
  114. for (StepsLyricjsonBean bean:wordList) {
  115. for (String w:
  116. bean.getWord()) {
  117. w = w.replaceAll("<i>","\n ");
  118. list.add(w);
  119. msg+=w;
  120. }
  121. }
  122. textView.setText(msg);
  123. setFlowData();
  124. }
  125. void startPlay(){
  126. String[] lyricList = lyric.split("\n");
  127. int startIndex = 0;
  128. long delayTime = 0L;
  129. // text.startPlayLine(
  130. // 0,
  131. // lyric.length,
  132. // 5000
  133. // )
  134. for (String s : lyricList) {
  135. int startIndexTemp = startIndex;
  136. long duration = 1000;
  137. textView.postDelayed(
  138. new Runnable() {
  139. @Override
  140. public void run() {
  141. textView.startPlayLine(
  142. startIndexTemp,
  143. startIndexTemp + s.length() + 1, // 因为有个换行符,所以 + 1
  144. 0);
  145. }
  146. },
  147. 0
  148. );
  149. delayTime += duration + 50;
  150. startIndex += s.length() + 1;
  151. }
  152. }
  153. @Override
  154. protected void onDestroy() {
  155. super.onDestroy();
  156. mediaPlayer.stop();
  157. }
  158. /**
  159. * 给流式布局设置值
  160. */
  161. private void setFlowData() {
  162. flowLayout.setAdapter(new TagAdapter<String>(list) {
  163. @Override
  164. public View getView(FlowLayout parent, int position, String s) {
  165. LayoutInflater inflater = LayoutInflater.from(getApplication());
  166. TextView textView = (TextView) inflater.inflate(R.layout.item_word_sound, flowLayout, false);
  167. textView.setText(s);
  168. return textView;
  169. }
  170. //当选中的时候
  171. @Override
  172. public void onSelected(int position, View view) {
  173. super.onSelected(position, view);
  174. TextView textView = (TextView) view;
  175. textView.setTextColor(Color.parseColor("#FFFFFF"));
  176. }
  177. //当没选中的时候
  178. @Override
  179. public void unSelected(int position, View view) {
  180. super.unSelected(position, view);
  181. TextView textView = (TextView) view;
  182. textView.setTextColor(Color.parseColor("#000000"));
  183. }
  184. });
  185. }
  186. }