MainMusicActivity.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. package com.usoftchina.pay;
  2. import android.media.MediaPlayer;
  3. import android.media.MediaPlayer.OnCompletionListener;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.support.v7.app.AppCompatActivity;
  7. import android.support.v7.widget.Toolbar;
  8. import android.util.Log;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;
  13. import android.widget.SeekBar;
  14. import android.widget.SeekBar.OnSeekBarChangeListener;
  15. import android.widget.TextView;
  16. import android.widget.Toast;
  17. import com.common.LogUtil;
  18. import com.core.utils.StatusBarUtil;
  19. import com.lg.lrcview_master.DefaultLrcParser;
  20. import com.lg.lrcview_master.LrcRow;
  21. import com.lg.lrcview_master.LrcView.OnLrcClickListener;
  22. import com.lg.lrcview_master.LrcView.OnSeekToListener;
  23. import com.usoftchina.music.R;
  24. import java.io.BufferedReader;
  25. import java.io.IOException;
  26. import java.io.InputStream;
  27. import java.io.InputStreamReader;
  28. import java.util.List;
  29. public class MainMusicActivity extends AppCompatActivity {
  30. private MediaPlayer mPlayer;
  31. /** 控制播放的SeekBar***/
  32. private SeekBar mPlayerSeekBar;
  33. /**控制歌词字体大小的SeekBar***/
  34. private SeekBar mLrcSeekBar;
  35. private Button mPlayBtn;
  36. private com.lg.lrcview_master.LrcView mLrcView;
  37. private TextView tv_timeStart;
  38. private TextView tv_timeTotal;
  39. private Toast mPlayerToast;
  40. private Toast mLrcToast;
  41. private Toolbar toolbar;
  42. @Override
  43. protected void onCreate(Bundle savedInstanceState) {
  44. super.onCreate(savedInstanceState);
  45. setContentView(R.layout.activity_main_music);
  46. initViews();
  47. initPlayer();
  48. toolbar=findViewById(R.id.commonToolBar);
  49. StatusBarUtil.immersive(this, 0x00000000, 0.0f);
  50. setSupportActionBar(toolbar);
  51. getSupportActionBar().setDisplayShowTitleEnabled(false);
  52. StatusBarUtil.setPaddingSmart(this, toolbar);
  53. toolbar.setNavigationIcon(R.drawable.back_black);
  54. toolbar.setNavigationOnClickListener(new OnClickListener() {
  55. @Override
  56. public void onClick(View view) {
  57. onBackPressed();
  58. }
  59. });
  60. }
  61. private void initViews() {
  62. mLrcView = (com.lg.lrcview_master.LrcView) findViewById(R.id.lrcView);
  63. mLrcView.setOnSeekToListener(onSeekToListener);
  64. mLrcView.setOnLrcClickListener(onLrcClickListener);
  65. tv_timeStart = findViewById(R.id.tv_timeStart);
  66. tv_timeTotal=findViewById(R.id.tv_timeTotal);
  67. mPlayerSeekBar = (SeekBar) findViewById(R.id.include_player_seekbar);
  68. mLrcSeekBar = (SeekBar) findViewById(R.id.include_lrc_seekbar);
  69. mLrcSeekBar.setMax(100);
  70. //为seekbar设置当前的progress
  71. mLrcSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
  72. new Handler().postDelayed(new Runnable() {
  73. @Override
  74. public void run() {
  75. float scalingFactor = com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR + 0*(com.lg.lrcview_master.LrcView.MAX_SCALING_FACTOR- com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR)/100;
  76. LogUtil.d("MusicApp","scalingFactor:"+scalingFactor+"");
  77. mLrcView.setLrcScalingFactor(scalingFactor);
  78. mPlayer.start();
  79. mLrcView.setLrcRows(getLrcRows());
  80. handler.sendEmptyMessage(0);
  81. mPlayBtn.setText("暂停");
  82. mPlayBtn.setSelected(true);
  83. }
  84. },1000);
  85. mPlayBtn = (Button) findViewById(R.id.btnPlay);
  86. mPlayerSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
  87. mPlayBtn.setOnClickListener(onClickListener);
  88. //getCommonToolBar().setBackgroundResource(R.color.transparent);
  89. }
  90. @Override
  91. protected void onResume() {
  92. super.onResume();
  93. }
  94. @Override
  95. protected void onPause() {
  96. super.onPause();
  97. mPlayer.pause();
  98. mPlayBtn.setText("播放");
  99. mPlayBtn.setSelected(false);
  100. }
  101. private void initPlayer() {
  102. mPlayer = MediaPlayer.create(this, R.raw.yingtang);
  103. mPlayer.setOnCompletionListener(onCompletionListener);
  104. }
  105. OnCompletionListener onCompletionListener = new OnCompletionListener() {
  106. @Override
  107. public void onCompletion(MediaPlayer mp) {
  108. mPlayBtn.setText("play");
  109. //mPlayBtn.setSelected(false);
  110. mLrcView.reset();
  111. handler.removeMessages(0);
  112. mPlayerSeekBar.setProgress(0);
  113. mPlayer.start();
  114. mLrcView.setLrcRows(getLrcRows());
  115. handler.sendEmptyMessage(0);
  116. mPlayBtn.setText("暂停");
  117. mPlayBtn.setSelected(true);
  118. }
  119. };
  120. OnLrcClickListener onLrcClickListener = new OnLrcClickListener() {
  121. @Override
  122. public void onClick() {
  123. //Toast.makeText(getApplicationContext(), "歌词被点击啦", Toast.LENGTH_SHORT).show();
  124. }
  125. };
  126. OnSeekToListener onSeekToListener = new OnSeekToListener() {
  127. @Override
  128. public void onSeekTo(int progress) {
  129. mPlayer.seekTo(progress);
  130. }
  131. };
  132. Handler handler = new Handler(){
  133. public void handleMessage(android.os.Message msg) {
  134. mPlayerSeekBar.setMax(mPlayer.getDuration());
  135. mPlayerSeekBar.setProgress(mPlayer.getCurrentPosition());
  136. handler.sendEmptyMessageDelayed(0, 100);
  137. };
  138. };
  139. OnClickListener onClickListener = new OnClickListener() {
  140. @Override
  141. public void onClick(View v) {
  142. if(v == mPlayBtn){
  143. if("play".equals(mPlayBtn.getText())){
  144. mPlayer.start();
  145. mLrcView.setLrcRows(getLrcRows());
  146. handler.sendEmptyMessage(0);
  147. mPlayBtn.setText("暂停");
  148. mPlayBtn.setSelected(true);
  149. }else{
  150. if(mPlayer.isPlaying()){
  151. mPlayer.pause();
  152. mPlayBtn.setText("播放");
  153. mPlayBtn.setSelected(false);
  154. }else{
  155. mPlayBtn.setSelected(true);
  156. mPlayer.start();
  157. mPlayBtn.setText("暂停");
  158. }
  159. }
  160. }
  161. }
  162. };
  163. OnSeekBarChangeListener onSeekBarChangeListener = new OnSeekBarChangeListener() {
  164. @Override
  165. public void onStopTrackingTouch(SeekBar seekBar) {
  166. if(seekBar == mPlayerSeekBar){
  167. mPlayer.seekTo(seekBar.getProgress());
  168. handler.sendEmptyMessageDelayed(0, 100);
  169. }
  170. }
  171. @Override
  172. public void onStartTrackingTouch(SeekBar seekBar) {
  173. if(seekBar == mPlayerSeekBar){
  174. handler.removeMessages(0);
  175. }
  176. }
  177. @Override
  178. public void onProgressChanged(SeekBar seekBar, int progress,
  179. boolean fromUser) {
  180. if(seekBar == mPlayerSeekBar){
  181. mLrcView.seekTo(progress, true,fromUser);
  182. // Log.d("timeStr",mLrcView.getmLrcRows().get(0).getTime()+"");
  183. Log.d("timeStrA",progress+"");
  184. tv_timeStart.setText(formatTimeFromProgress(progress));
  185. tv_timeTotal.setText(formatTimeFromProgress(mPlayer.getDuration()));
  186. if(fromUser){
  187. showPlayerToast(formatTimeFromProgress(progress));
  188. }
  189. }else if(seekBar == mLrcSeekBar){
  190. float scalingFactor = com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR + progress*(com.lg.lrcview_master.LrcView.MAX_SCALING_FACTOR- com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR)/100;
  191. mLrcView.setLrcScalingFactor(scalingFactor);
  192. showLrcToast((int)(scalingFactor*100)+"%");
  193. }
  194. }
  195. };
  196. /**
  197. * 将播放进度的毫米数转换成时间格式
  198. * 如 3000 --> 00:03
  199. * @param progress
  200. * @return
  201. */
  202. private String formatTimeFromProgress(int progress){
  203. //总的秒数
  204. int msecTotal = progress/1000;
  205. int min = msecTotal/60;
  206. int msec = msecTotal%60;
  207. String minStr = min < 10 ? "0"+min:""+min;
  208. String msecStr = msec < 10 ? "0"+msec:""+msec;
  209. return minStr+":"+msecStr;
  210. }
  211. /**
  212. * 获取歌词List集合
  213. * @return
  214. */
  215. private List<LrcRow> getLrcRows(){
  216. List<LrcRow> rows = null;
  217. InputStream is = getResources().openRawResource(R.raw.yingtanglrc);
  218. BufferedReader br = new BufferedReader(new InputStreamReader(is));
  219. String line ;
  220. StringBuffer sb = new StringBuffer();
  221. try {
  222. while((line = br.readLine()) != null){
  223. sb.append(line+"\n");
  224. }
  225. System.out.println(sb.toString());
  226. rows = DefaultLrcParser.getIstance().getLrcRows(sb.toString());
  227. } catch (IOException e) {
  228. e.printStackTrace();
  229. }
  230. return rows;
  231. }
  232. private TextView mPlayerToastTv;
  233. private void showPlayerToast(String text){
  234. if(mPlayerToast == null){
  235. mPlayerToast = new Toast(this);
  236. mPlayerToastTv = (TextView) LayoutInflater.from(this).inflate(R.layout.toast, null);
  237. mPlayerToast.setView(mPlayerToastTv);
  238. mPlayerToast.setDuration(Toast.LENGTH_SHORT);
  239. }
  240. mPlayerToastTv.setText(text);
  241. mPlayerToast.show();
  242. }
  243. private TextView mLrcToastTv;
  244. private void showLrcToast(String text){
  245. if(mLrcToast == null){
  246. mLrcToast = new Toast(this);
  247. mLrcToastTv = (TextView) LayoutInflater.from(this).inflate(R.layout.toast, null);
  248. mLrcToast.setView(mLrcToastTv);
  249. mLrcToast.setDuration(Toast.LENGTH_SHORT);
  250. }
  251. mLrcToastTv.setText(text);
  252. mLrcToast.show();
  253. }
  254. @Override
  255. protected void onDestroy() {
  256. super.onDestroy();
  257. handler.removeMessages(0);
  258. mPlayer.stop();
  259. mPlayer.release();
  260. mPlayer = null;
  261. mLrcView.reset();
  262. }
  263. }