此次音乐播放器是针对上一个:https://blog.csdn.net/qq_43433255/article/details/88084420
开发出来的一个功能增强型,基本实现功能为:

  1. 通过列表管理SD中的音乐文件。
  2. 通过seekbar可以显示一首音乐的播放进度。
  3. 通过seekbar实现音乐播放的进度控制
  4. 根据不同的音乐切换背景图片
    当然最近有小伙伴找我要全部代码,因为后面有些代码是截图,我已经上传了:https://download.csdn.net/download/qq_43433255/11203930
    (我发现,这个积分好像是自动默认的,以前能设置积分)
    界面设计部分:


    activity_main的代码为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.shaoyangyang.shaoshuaih.MainActivity"><LinearLayoutandroid:id="@+id/main_top_linlayout"android:layout_width="match_parent"android:layout_height="50dp"android:background="@color/reddemo"><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/main_menu_imgv"android:layout_width="30dp"android:layout_height="30dp"android:layout_centerVertical="true"android:layout_marginLeft="15dp"android:src="@mipmap/ic_menu" /><TextViewandroid:id="@+id/main_logic_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="10dp"android:text="我的音乐"android:textColor="@color/white"android:textSize="25dp" /></RelativeLayout></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/main_online_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:text="在线音乐"android:textColor="@color/white_60P"android:textSize="25dp" /><ImageViewandroid:id="@+id/main_search_imgv"android:layout_width="40dp"android:layout_height="40dp"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="10dp"android:src="@mipmap/ic_menu_search" /></RelativeLayout></LinearLayout></LinearLayout><android.support.v4.view.ViewPagerandroid:id="@+id/main_vp"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.v4.view.ViewPager></LinearLayout>

acticity_music的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.shaoyangyang.shaoshuaih.MusicActivity"><ImageViewandroid:id="@+id/music_bg_imgv"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="centerCrop"android:src="@mipmap/touxiang1" /><RelativeLayoutandroid:id="@+id/music_relativelayout"android:layout_width="match_parent"android:layout_height="50dp"><ImageViewandroid:id="@+id/music_down_imgv"android:layout_width="50dp"android:layout_height="50dp"android:layout_alignParentLeft="true"android:layout_margin="10dp"android:src="@mipmap/ic_arrow_down" /><TextViewandroid:id="@+id/music_title_tv"android:layout_width="match_parent"android:layout_height="28dp"android:layout_toRightOf="@+id/music_down_imgv"android:text="周杰伦"android:textColor="#ffffff"android:textSize="20sp" /><TextViewandroid:id="@+id/music_artist_tv"android:layout_width="match_parent"android:layout_height="22dp"android:layout_below="@+id/music_title_tv"android:layout_marginLeft="8dp"android:layout_toRightOf="@+id/music_down_imgv"android:text="告白气球"android:textColor="#ffffff"android:textSize="15sp" /></RelativeLayout><RelativeLayoutandroid:layout_width="350dp"android:layout_height="500dp"android:layout_above="@+id/music_linlayout"android:layout_below="@+id/music_relativelayout"android:layout_centerHorizontal="true"android:layout_centerVertical="true"><ImageViewandroid:id="@+id/music_disc_imagv"android:layout_width="match_parent"android:layout_height="300dp"android:layout_marginTop="100dp"android:src="@mipmap/play_page_disc" /><ImageViewandroid:id="@+id/music_needle_imag"android:layout_width="150dp"android:layout_height="159dp"android:layout_marginLeft="132dp"android:src="@mipmap/play_page_needle" /></RelativeLayout><LinearLayoutandroid:id="@+id/music_linlayout"android:layout_width="match_parent"android:layout_height="90dp"android:layout_alignParentBottom="true"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="5"android:orientation="horizontal"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/music_current_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:text="00:00"android:textColor="#ffffff" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:layout_toLeftOf="@+id/music_total_tv"android:layout_toRightOf="@+id/music_current_tv"><SeekBarandroid:id="@+id/music_seekbar"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout><TextViewandroid:id="@+id/music_total_tv"android:layout_width="50dp"android:layout_height="wrap_content"android:layout_marginRight="10dp"android:layout_alignParentRight="true"android:text="10:20"android:textColor="#ffffff" /></RelativeLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="10"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/music_play_btn_loop_img"android:layout_width="60dp"android:layout_height="60dp"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:src="@mipmap/ic_play_btn_loop" /><ImageViewandroid:id="@+id/music_prev_imgv"android:layout_width="60dp"android:layout_height="60dp"android:layout_centerVertical="true"android:layout_toRightOf="@+id/music_play_btn_loop_img"android:src="@drawable/seach_btn_pre" /><ImageViewandroid:id="@+id/music_pause_imgv"android:layout_width="60dp"android:layout_height="60dp"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:src="@drawable/seach_btn_pause" /><ImageViewandroid:id="@+id/music_next_imgv"android:layout_width="60dp"android:layout_height="60dp"android:layout_centerVertical="true"android:layout_marginLeft="25dp"android:layout_toRightOf="@id/music_pause_imgv"android:src="@drawable/seach_btn_next" /></RelativeLayout></LinearLayout></LinearLayout></RelativeLayout>

mainactivity.java的代码:

package com.example.shaoyangyang.shaoshuaih;import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.media.Image;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;import com.example.shaoyangyang.shaoshuaih.adapter.MusicPagerAdapter;
import com.example.shaoyangyang.shaoshuaih.fragment.LogicFragment;
import com.example.shaoyangyang.shaoshuaih.fragment.OnlineFragment;import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;//实现OnClickListener的接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener {//定义activity_main.xml的控件对象private TextView logicTv;private TextView onlineTv;private ViewPager viewPager;private ImageView menuImagv;private ImageView seachImagv;private Calendar calendar;//将Fragment放入List集合中,存放fragment对象private List<Fragment> fragmentList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//绑定idbangdingID();//设置监听jianting();//创建fragment对象LogicFragment logicFragment = new LogicFragment();OnlineFragment onlineFragment = new OnlineFragment();//将fragment对象添加到fragmentList中fragmentList.add(logicFragment);fragmentList.add(onlineFragment);//通过MusicPagerAdapter类创建musicPagerAdapter的适配器,下面我将添加MusicPagerAdapter类的创建方法MusicPagerAdapter musicPagerAdapter = new MusicPagerAdapter(getSupportFragmentManager(), fragmentList);//viewPager绑定适配器viewPager.setAdapter(musicPagerAdapter);viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {switch (position) {case 0:logicTv.setTextColor(getResources().getColor(R.color.white));onlineTv.setTextColor(getResources().getColor(R.color.white_60P));break;case 1:onlineTv.setTextColor(getResources().getColor(R.color.white));logicTv.setTextColor(getResources().getColor(R.color.white_60P));break;}}@Overridepublic void onPageScrollStateChanged(int state) {}});}private void jianting() {logicTv.setOnClickListener(this);onlineTv.setOnClickListener(this);menuImagv.setOnClickListener(this);seachImagv.setOnClickListener(this);}private void bangdingID() {logicTv = findViewById(R.id.main_logic_tv);onlineTv = findViewById(R.id.main_online_tv);viewPager = findViewById(R.id.main_vp);menuImagv = findViewById(R.id.main_menu_imgv);seachImagv = findViewById(R.id.main_search_imgv);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.main_logic_tv://实现点击TextView切换fragmentviewPager.setCurrentItem(0);break;case R.id.main_online_tv:viewPager.setCurrentItem(1);break;case R.id.main_menu_imgv:calendar = Calendar.getInstance();int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);int day = calendar.get(Calendar.DAY_OF_MONTH);DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {Toast.makeText(MainActivity.this, "所选择的日期是:" + year + "-" + (month + 1) + "-" + dayOfMonth, Toast.LENGTH_SHORT).show();}}, year, month, day);datePickerDialog.show();break;case R.id.main_search_imgv:calendar = Calendar.getInstance();int hour = calendar.get(Calendar.HOUR);int minute = calendar.get(Calendar.MINUTE);TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {Toast.makeText(MainActivity.this, "所选择的时间是:" + hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show();}}, hour, minute, true);timePickerDialog.show();break;default:break;}}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_HOME) {final View view = LayoutInflater.from(this).inflate(R.layout.dialog1_layout, null);AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("退出提示");builder.setView(view);builder.setPositiveButton("能", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish();}});builder.setNegativeButton("不能", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "且看曼城分分 钟打你脸", Toast.LENGTH_SHORT).show();}});builder.show();}return super.onKeyDown(keyCode, event);}
}

musicactivity。java的代码:

package com.example.shaoyangyang.shaoshuaih;import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.TargetApi;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;import com.example.shaoyangyang.shaoshuaih.entity.Music;
import com.example.shaoyangyang.shaoshuaih.utils.BlurUtil;
import com.example.shaoyangyang.shaoshuaih.utils.Common;
import com.example.shaoyangyang.shaoshuaih.utils.MergeImage;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;public class MusicActivity extends AppCompatActivity implements View.OnClickListener {//定义activity_music.xml的控件对象//设置音乐播放模式private int i = 0;private int playMode = 0;private int buttonWitch = 0;private ImageView bgImgv;private TextView titleTv;private TextView artistTv;private TextView currrentTv;private TextView totalTv;private ImageView prevImgv;private ImageView nextImgv;private int position;private ImageView discImagv;private ImageView needleImagv;private MediaPlayer mediaPlayer;private ImageView pauseImgv;private ImageView downImg;private ImageView styleImg;private SeekBar seekBar;private int totaltime;private boolean isStop;private ObjectAnimator objectAnimator = null;private RotateAnimation rotateAnimation = null;private RotateAnimation rotateAnimation2 = null;private String TAG = "MusicActivity";//Handler实现向主线程进行传值private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);seekBar.setProgress((int) (msg.what));currrentTv.setText(formatTime(msg.what));}};//MusicActivity onCreate()方法@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_music);bingID();                                                                           //调用bingID();方法实现对控件的绑定Intent intent = getIntent();                                                    //通过getIntent()方法实现intent信息的获取position = intent.getIntExtra("position", 0);            //获取positionmediaPlayer = new MediaPlayer();prevAndnextplaying(Common.musicList.get(position).path);seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {               //seekbar设置监听,实现指哪放到哪@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {if (fromUser) {mediaPlayer.seekTo(progress);}}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});}//prevAndnext() 实现页面的展现private void prevAndnextplaying(String path) {isStop = false;mediaPlayer.reset();titleTv.setText(Common.musicList.get(position).title);artistTv.setText(Common.musicList.get(position).artist + "--" + Common.musicList.get(position).album);pauseImgv.setImageResource(R.mipmap.ic_play_btn_pause);if (Common.musicList.get(position).albumBip != null) {Bitmap bgbm = BlurUtil.doBlur(Common.musicList.get(position).albumBip, 10, 5);//将专辑虚化bgImgv.setImageBitmap(bgbm);                                    //设置虚化后的专辑图片为背景Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.mipmap.play_page_disc);//BitmapFactory.decodeResource用于根据给定的资源ID从指定的资源文件中解析、创建Bitmap对象。Bitmap bm = MergeImage.mergeThumbnailBitmap(bitmap1, Common.musicList.get(position).albumBip);//将专辑图片放到圆盘中discImagv.setImageBitmap(bm);} else {Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.touxiang1);bgImgv.setImageBitmap(bitmap);Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.mipmap.play_page_disc);Bitmap bm = MergeImage.mergeThumbnailBitmap(bitmap1, bitmap);discImagv.setImageBitmap(bm);}try {mediaPlayer.setDataSource(path);mediaPlayer.prepare();                   // 准备mediaPlayer.start();                        // 启动mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@RequiresApi(api = Build.VERSION_CODES.KITKAT)@Overridepublic void onCompletion(MediaPlayer mp) {if(!mediaPlayer.isPlaying()){setPlayMode();}}});} catch (IllegalArgumentException | SecurityException | IllegalStateException| IOException e) {e.printStackTrace();}totalTv.setText(formatTime(Common.musicList.get(position).length));seekBar.setMax(Common.musicList.get(position).length);MusicThread musicThread = new MusicThread();                                         //启动线程new Thread(musicThread).start();//实例化,设置旋转对象objectAnimator = ObjectAnimator.ofFloat(discImagv, "rotation", 0f, 360f);//设置转一圈要多长时间objectAnimator.setDuration(8000);//设置旋转速率objectAnimator.setInterpolator(new LinearInterpolator());//设置循环次数 -1为一直循环objectAnimator.setRepeatCount(-1);//设置转一圈后怎么转objectAnimator.setRepeatMode(ValueAnimator.RESTART);objectAnimator.start();rotateAnimation = new RotateAnimation(-25f, 0f, Animation.RELATIVE_TO_SELF, 0.3f, Animation.RELATIVE_TO_SELF, 0.1f);rotateAnimation.setDuration(500);rotateAnimation.setInterpolator(new LinearInterpolator());rotateAnimation.setRepeatCount(0);rotateAnimation.setFillAfter(true);rotateAnimation.setStartOffset(500);needleImagv.setAnimation(rotateAnimation);rotateAnimation.cancel();rotateAnimation2 = new RotateAnimation(0f, -25f, Animation.RELATIVE_TO_SELF, 0.3f, Animation.RELATIVE_TO_SELF, 0.1f);rotateAnimation2.setDuration(500);rotateAnimation2.setInterpolator(new LinearInterpolator());rotateAnimation2.setRepeatCount(0);rotateAnimation2.setFillAfter(true);needleImagv.setAnimation(rotateAnimation2);rotateAnimation2.cancel();}@RequiresApi(api = Build.VERSION_CODES.KITKAT)private void setPlayMode() {if (playMode == 0)//全部循环{if (position == Common.musicList.size() - 1)//默认循环播放{position = 0;// 第一首mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);} else {position++;mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);}} else if (playMode == 1)//单曲循环{//position不需要更改mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);} else if (playMode == 2)//随机{position = (int) (Math.random() * Common.musicList.size());//随机播放mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);}}@TargetApi(Build.VERSION_CODES.KITKAT)private void setBtnMode() {if (playMode == 0)//全部循环{if (position == Common.musicList.size() - 1)//默认循环播放{if (buttonWitch == 1) {position--;mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);} else if (buttonWitch == 2) {position = 0;// 第一首mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);}} else if (position == 0) {if (buttonWitch == 1) {position = Common.musicList.size() - 1;mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);} else if (buttonWitch == 2) {position++;mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);}}else {if(buttonWitch ==1){position--;mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);}else if(buttonWitch ==2){position++;mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);}}} else if (playMode == 1)//单曲循环{//position不需要更改mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);} else if (playMode == 2)//随机{position = (int) (Math.random() * Common.musicList.size());//随机播放mediaPlayer.reset();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);prevAndnextplaying(Common.musicList.get(position).path);}}//格式化数字private String formatTime(int length) {Date date = new Date(length);SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss");    //规定固定的格式String totaltime = simpleDateFormat.format(date);return totaltime;}//绑定id,设置监听private void bingID() {titleTv = findViewById(R.id.music_title_tv);artistTv = findViewById(R.id.music_artist_tv);bgImgv = findViewById(R.id.music_bg_imgv);currrentTv = findViewById(R.id.music_current_tv);totalTv = findViewById(R.id.music_total_tv);prevImgv = findViewById(R.id.music_prev_imgv);nextImgv = findViewById(R.id.music_next_imgv);discImagv = findViewById(R.id.music_disc_imagv);needleImagv = findViewById(R.id.music_needle_imag);pauseImgv = findViewById(R.id.music_pause_imgv);downImg = findViewById(R.id.music_down_imgv);seekBar = findViewById(R.id.music_seekbar);styleImg = findViewById(R.id.music_play_btn_loop_img);pauseImgv.setOnClickListener(this);prevImgv.setOnClickListener(this);nextImgv.setOnClickListener(this);downImg.setOnClickListener(this);styleImg.setOnClickListener(this);}//onClick()点击监听@RequiresApi(api = Build.VERSION_CODES.KITKAT)@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.music_prev_imgv:buttonWitch = 1;setBtnMode();break;case R.id.music_next_imgv:buttonWitch = 2;setBtnMode();break;case R.id.music_pause_imgv:if (mediaPlayer.isPlaying()) {mediaPlayer.pause();objectAnimator.pause();needleImagv.startAnimation(rotateAnimation2);pauseImgv.setImageResource(R.mipmap.ic_play_btn_play);} else {mediaPlayer.start();objectAnimator.resume();needleImagv.startAnimation(rotateAnimation);pauseImgv.setImageResource(R.mipmap.ic_play_btn_pause);}break;case R.id.music_play_btn_loop_img:i++;if (i % 3 == 1) {Toast.makeText(MusicActivity.this, "单曲循环", Toast.LENGTH_SHORT).show();playMode = 1;styleImg.setImageResource(R.mipmap.ic_play_btn_one);}if (i % 3 == 2) {Toast.makeText(MusicActivity.this, "随机播放", Toast.LENGTH_SHORT).show();playMode = 2;styleImg.setImageResource(R.mipmap.ic_play_btn_shuffle);}if (i % 3 == 0) {Toast.makeText(MusicActivity.this, "顺序播放", Toast.LENGTH_SHORT).show();playMode = 0;styleImg.setImageResource(R.mipmap.ic_play_btn_loop);}break;case R.id.music_down_imgv:this.finish();break;default:break;}}@Overrideprotected void onPause() {super.onPause();for (Music music : Common.musicList) {music.isPlaying = false;}Common.musicList.get(position).isPlaying = true;}@Overrideprotected void onStop() {super.onStop();}@Overrideprotected void onDestroy() {super.onDestroy();i = 0;isStop = false;if (mediaPlayer.isPlaying()) {mediaPlayer.stop();}if (mediaPlayer != null) {mediaPlayer.stop();}}//创建一个类MusicThread实现Runnable接口,实现多线程class MusicThread implements Runnable {@Overridepublic void run() {while (!isStop && Common.musicList.get(position) != null) {try {//让线程睡眠1000毫秒Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}//放送给Handler现在的运行到的时间,进行ui更新handler.sendEmptyMessage(mediaPlayer.getCurrentPosition());}}}}

代码繁多:


贴上一些关键代码提供参考!

最后,音乐播放器的效果图如下:

Android开发之本地音乐播放器(二)相关推荐

  1. Android 编程案例-本地音乐播放器源码及使用注意事项

    说一下代码在用的时候注意事项以及在运行的时候可能遇到的问题: 首先代码可以在创建相应文件后直接复制,这个案例用到了RecyclerView,所以需要先添加依赖.添加下面两个: implementati ...

  2. Android开发之简易音乐播放器(一)

    这里介绍一个简易的音乐播放器, 效果图如下: 但是,由于这是一个简易版的音乐播放器,所播放的音乐只有一首,且被写死, 但,操作却十分简单,方便理解! 这是代码的主要设计: 音乐主要存放在这一个文件中: ...

  3. Android 简单的本地音乐播放器Demo

    一个小小的本地音乐播放器,花了几个小时完成的,帮朋友做的毕业作业. 包含基本播放功能.进度条显示和拖拽.时间倒计.后台播放.一键刷新.收藏操作.单独播放收藏页的音乐.... 代码没有一定的模式和注释, ...

  4. Android之简单本地音乐播放器

    平台:Android studio APK:http://fir.im/apps/56ea5187e75e2d69af000042 本地的音乐播放器,主要功能就是可以播放音乐,能够读取本地的音乐,并显 ...

  5. 绝对零度试验机的创造战记:2.小型HTML5本地音乐播放器

    绝对零度试验机的创造战记:2.小型HTML5本地音乐播放器 二前记: 接触HTML5和Javascript已经有三四个月了,一直都是半桶水程度,当然,想达到满水的程度还真不是那么简单. 之前买过一本H ...

  6. Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51448597 项目源码(打赏5积分请点这边):http://download.csdn ...

  7. Android端本地音乐播放器(一)---前言

    前言: 2018时的记录:大概一周多以前(现在是2018.11.26   15:24)android平台开发的课程结束了,要写大作业,最后决定写这个音乐播放器,因为老师在课堂上讲的例子也是这个,前面的 ...

  8. 我的音乐(Musicoco)- 本地音乐播放器开发总结

    开源一个功能相对齐全的本地音乐播放器 简述 从五月末就开始利用空余时间开发这款 app ,不知不觉三个月过去了. App 名称:我的音乐,我给取了个别名:Musicoco. Android 手机本地音 ...

  9. 基于 Qt5 ( C++ ) 开发的一个小巧精美的本地音乐播放器

    LightMusicPlayer --南京大学2019秋季学期 "高级程序设计" 课程设计三 基于Qt5开发的一个小巧精美的本地音乐播放器 代码注释详细,适合作为一个用于入门的Qt ...

最新文章

  1. sql 账号查询一个表勾选那个权限_Spring Cloud微服务架构中的数据权限DataPermision实现方案...
  2. 已遭利用的微软0day CVE-2020-1464,原来是两年前的老相识
  3. hdu5354 Bipartite Graph
  4. linux uuid挂载磁盘_linux-开机自动挂载磁盘简介
  5. 【VS2010学习笔记】【编程实例】 (含有类的动态链接库的封装和调用)
  6. .net DLL反编译文件
  7. linux ps 主进程,Linux ps 查看进程
  8. 猫和老鼠服务器维修有问题,猫和老鼠手游:被救救我困扰了一整局 大佬:这是天使的副作用!...
  9. 主力吸筹猛攻指标源码_主力吸筹猛攻指标源码-通达信公式 -程序化交易(CXH99.COM)...
  10. 兴业java入职考试是考什么_兴业银行考试考什么
  11. 递归算法从入门到完全掌握
  12. 扫黑除恶Team第四次团队作业
  13. 工业蒸汽量预测-特征工程
  14. 3D游戏制作——AI坦克对战
  15. 浏览器内核WebKit编年史
  16. 土巴兔IPO被终止:年利润下降33% 经纬红杉是股东
  17. 校友管理系统 java_JAVA同学录管理系统的设计(SQL)
  18. java时区转换 夏令时_实现时区的转换--涉及到冬令时和夏令时的时候
  19. Python黑马学习笔记Day01
  20. python桌面程序臃肿_摆脱臃肿蜗牛印象!微软 Visual Studio 15 安装体验大变革

热门文章

  1. 台式电脑可以练计算机二级吗,全国计算机二级考试(考二级能用office2019练吗)...
  2. 怎么关闭win10防火墙
  3. CTFshow_终极考核_EXP
  4. Window,WindowManager学习总结
  5. Android自定义系列——9.Path详细用法
  6. c语言单片机读引脚,单片机引脚读写操作
  7. GNN推荐算法(二)—Multi-GCCF:物尽其用
  8. 【概念简介】编辑器及第一个Javas cript程序
  9. 打开 word 显示内存或磁盘空间不足 ,Word 无法显示所请求的字体
  10. ❤️ 珊姐带你学JavaScript:数组和函数 (万文建藏)❤️