非常简单的一个音乐播放器,话不多说,直接上代码。

首先,看看我们的实际效果图,我这里文字嫌懒是直接命名的(小伙伴们不要学哦,可以在res里的string里赋值调用),先来看看layout的效果图

随便编写的,有能力的小伙伴可以自行编写哦

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><androidx.appcompat.widget.Toolbarandroid:id="@+id/linear1"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/gray"android:orientation="horizontal"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/ce_bian"android:layout_width="50dp"android:layout_height="50dp"android:layout_marginLeft="-5dp"android:layout_centerVertical="true"android:layout_gravity="center"android:background="@drawable/ic_launche_music_cebian_foreground"android:textColor="@color/black"android:textSize="25dp" /><EditTextandroid:id="@+id/Editext"android:layout_width="275dp"android:layout_height="40dp"android:layout_centerVertical="true"android:layout_toRightOf="@id/ce_bian"android:background="@drawable/search_border"android:gravity="center"android:hint="搜索"android:textColorHint="@color/black"android:textSize="12sp" /><Buttonandroid:layout_width="35dp"android:layout_height="35dp"android:layout_centerVertical="true"android:layout_marginLeft="15dp"android:layout_toRightOf="@id/Editext"android:background="@drawable/ic_launche_music_round" /></RelativeLayout></androidx.appcompat.widget.Toolbar><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/local_music_rv"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/linear1" /><RelativeLayoutandroid:id="@+id/bottom_music"android:layout_width="match_parent"android:layout_height="50dp"android:layout_alignParentBottom="true"android:background="@drawable/backgroundground_bian"><ImageViewandroid:layout_width="wrap_content"android:layout_height="0.5dp" /><ImageViewandroid:id="@+id/local_music_bottom_tv_icon"android:layout_width="40dp"android:layout_height="40dp"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:background="@drawable/ic_launche_music_round"android:scaleType="center" /><TextViewandroid:id="@+id/local_music_bottom_tv_singer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:layout_marginTop="10dp"android:layout_toRightOf="@id/local_music_bottom_tv_song"android:ellipsize="end"android:maxEms="6"android:singleLine="true"android:textSize="16sp"android:textStyle="bold" /><TextViewandroid:id="@+id/local_music_bottom_tv_song"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="5dp"android:layout_marginTop="10dp"android:layout_toRightOf="@id/local_music_bottom_tv_icon"android:ellipsize="end"android:maxEms="6"android:singleLine="true"android:textSize="16sp"android:textStyle="bold" /><ImageViewandroid:id="@+id/local_music_bottom_iv_next"android:layout_width="55dp"android:layout_height="55dp"android:layout_alignParentRight="true"android:src="@drawable/ic_launche_music_next_foreground" /><ImageViewandroid:id="@+id/local_music_bottom_iv_play"android:layout_width="40dp"android:layout_height="55dp"android:layout_toLeftOf="@id/local_music_bottom_iv_next"android:src="@drawable/ic_launche_music_play_foreground" /><ImageViewandroid:id="@+id/local_music_bottom_iv_last"android:layout_width="55dp"android:layout_height="55dp"android:layout_toLeftOf="@id/local_music_bottom_iv_play"android:src="@drawable/ic_launche_music_last_foreground" /></RelativeLayout>
</RelativeLayout>

接下来到我们的代码部分

先创建一个bean 用于我们获取歌曲的参数

package com.example.myapplication.musci;public class LocalMusicBean {private String id;private String song;private String singer;private String album;private String duration;private String path;public LocalMusicBean(String id, String song, String singer, String album, String duration, String path) {this.id = id;this.song = song;this.singer = singer;this.album = album;this.duration = duration;this.path = path;}public LocalMusicBean() {}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getSong() {return song;}public void setSong(String song) {this.song = song;}public String getSinger() {return singer;}public void setSinger(String singer) {this.singer = singer;}public String getAlbum() {return album;}public void setAlbum(String album) {this.album = album;}public String getDuration() {return duration;}public void setDuration(String duration) {this.duration = duration;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}}

接着是music适配器

package com.example.myapplication.musci;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import com.example.myapplication.R;import java.util.List;public class LocalMusciAdapter extends RecyclerView.Adapter<LocalMusciAdapter.LocalMusicViewHolder> {//声明一个上下文内容承接private Context context;private List<LocalMusicBean> mDates;//创建点击每一项列表的点击函数OnItemClickListener onItemClickListener;public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.onItemClickListener = onItemClickListener;}public interface OnItemClickListener {public void OnItemClick(View view, int position);}public LocalMusciAdapter(Context context, List<LocalMusicBean> mDates) {this.context = context;this.mDates = mDates;}@NonNull@Overridepublic LocalMusicViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(context).inflate(R.layout.item_local_music, parent, false);LocalMusicViewHolder holder = new LocalMusicViewHolder(view);return holder;}@Overridepublic void onBindViewHolder(@NonNull LocalMusicViewHolder holder, int position) {LocalMusicBean musicBean = mDates.get(position);holder.idTv.setText(musicBean.getId());holder.songTv.setText(musicBean.getSong());holder.singTv.setText(musicBean.getSinger());holder.albumTv.setText(musicBean.getAlbum());holder.durationTv.setText(musicBean.getDuration());holder.itemView.setOnClickListener(view -> onItemClickListener.OnItemClick(view, position));}@Overridepublic int getItemCount() {return mDates.size();}class LocalMusicViewHolder extends RecyclerView.ViewHolder {TextView idTv, songTv, singTv, albumTv, durationTv;public LocalMusicViewHolder(@NonNull View itemView) {super(itemView);idTv = itemView.findViewById(R.id.item_local_music_num);songTv = itemView.findViewById(R.id.item_local_music_song);singTv = itemView.findViewById(R.id.item_local_music_singer);albumTv = itemView.findViewById(R.id.item_local_music_album);durationTv = itemView.findViewById(R.id.item_local_music_duration);}}
}

接着就是我们的mainActivity

package com.example.myapplication;import android.content.ContentResolver;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import com.example.myapplication.musci.LocalMusciAdapter;
import com.example.myapplication.musci.LocalMusicBean;import java.io.IOException;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener, MediaPlayer.OnCompletionListener {private TextView songTv, singerTv;private ImageView playIv, lastIv, nextIv;private RecyclerView musicRv;private List<LocalMusicBean> mDate;private LocalMusciAdapter adapter;MediaPlayer mediaPlayer;int currentPausePositionInSong = 0;private int currnetPlayPosition = -1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getSupportActionBar().hide();setContentView(R.layout.activity_main);initView();mDate = new ArrayList<>();mediaPlayer = new MediaPlayer();adapter = new LocalMusciAdapter(this, mDate);musicRv.setAdapter(adapter);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);musicRv.setLayoutManager(linearLayoutManager);loadLocalMusicData();setEvenClickListener();}private void setEvenClickListener() {adapter.setOnItemClickListener(new LocalMusciAdapter.OnItemClickListener() {@Overridepublic void OnItemClick(View view, int position) {currnetPlayPosition = position;playMusicPosition(position);}});}private void playMusicPosition(int position) {singerTv.setText(mDate.get(position).getSinger());songTv.setText(mDate.get(position).getSong());stopMusic();mediaPlayer.reset();try {mediaPlayer.setDataSource(mDate.get(position).getPath());playMusic();} catch (IOException e) {e.printStackTrace();}}private void playMusic() {if (mediaPlayer != null && !mediaPlayer.isPlaying()) {try {mediaPlayer.prepare();mediaPlayer.start();} catch (IOException e) {e.printStackTrace();}}playIv.setImageResource(R.drawable.ic_launche_music_pause_foreground);}private void stopMusic() {if (mediaPlayer != null) {currentPausePositionInSong = 0;mediaPlayer.pause();mediaPlayer.seekTo(0);mediaPlayer.stop();playIv.setImageResource(R.drawable.ic_launche_music_play_foreground);}}private void pauseMusic() {if (mediaPlayer != null && mediaPlayer.isPlaying()) {currentPausePositionInSong = mediaPlayer.getCurrentPosition();mediaPlayer.pause();playIv.setImageResource(R.drawable.ic_launche_music_play_foreground);}}@Overrideprotected void onDestroy() {super.onDestroy();stopMusic();}private void loadLocalMusicData() {ContentResolver resolver = getContentResolver();Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;Cursor cursor = resolver.query(uri, null, null, null);int id = 0;while (cursor.moveToNext()) {String song = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));String singer = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));id++;String sid = String.valueOf(id);String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));long duration = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");String time = sdf.format(new Date(duration));if (time.equals("00:00")) {id--;continue;} else {LocalMusicBean bean = new LocalMusicBean(sid, album, song, singer, time, path);mDate.add(bean);}}adapter.notifyDataSetChanged();}private void initView() {nextIv = findViewById(R.id.local_music_bottom_iv_next);lastIv = findViewById(R.id.local_music_bottom_iv_last);playIv = findViewById(R.id.local_music_bottom_iv_play);songTv = findViewById(R.id.local_music_bottom_tv_song);singerTv = findViewById(R.id.local_music_bottom_tv_singer);musicRv = findViewById(R.id.local_music_rv);nextIv.setOnClickListener(this);lastIv.setOnClickListener(this);playIv.setOnClickListener(this);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.local_music_bottom_iv_next:if (currnetPlayPosition == mDate.size() - 1) {currnetPlayPosition = 0;playMusicPosition(currnetPlayPosition);return;}currnetPlayPosition = currnetPlayPosition + 1;playMusicPosition(currnetPlayPosition);break;case R.id.local_music_bottom_iv_last:if (currnetPlayPosition == 0) {currnetPlayPosition = mDate.size() - 1;playMusicPosition(currnetPlayPosition);return;}currnetPlayPosition = currnetPlayPosition - 1;playMusicPosition(currnetPlayPosition);break;case R.id.local_music_bottom_iv_play:if (currnetPlayPosition == -1) {return;}if (mediaPlayer.isPlaying()) {pauseMusic();} else {playMusic();}break;}}

有问题的小伙伴可以私信交流哦

简单音乐播放器,上一曲下一曲,暂停相关推荐

  1. 安卓简单音乐播放器——上一首、下一首、暂停和停止

    安卓超简单音乐播放器 功能上一首.下一首.暂停和停止 歌曲状态控制语句: switch (control){// 播放或暂停case 1:// 原来处于没有播放状态if (status == 0x11 ...

  2. 安卓java音乐播放器下一曲_Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个 ...

  3. vue 音乐播放器上一首 下一首切换

    vue 音乐播放器上一首 下一首切换 根据自定义属性的值找到元素 我是使用监听来实现切换的,将v-for循环列表的index存储在vuex中,点击上一首或下一首改变index的值,在另一个组件中监听i ...

  4. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下: http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该 ...

  5. 简单音乐播放器的设计与实现

    简单音乐播放器的设计与实现 本文将介绍如何在Andriod Studio设计制作一个简单音乐播放器 功能说明 ​ 第二次安卓开发,所以要求相对上次而言难度稍微加大了一点.该程序实现的主要功能有上一曲, ...

  6. 简单音乐播放器html+css+基础vue+含源码,有搜索和播放mv功能,代码可直接复制用。

    题目:html+css+基础vue实现的简单音乐播放器(含源码),有搜索和播放mv功能,代码可直接复制用. 问题描述: 如果vue刚入门,掌握一些基础语法后就可以写一个简单的音乐播放器来练练手~~如果 ...

  7. android音乐播放器实现,Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个 ...

  8. C/C++简单音乐播放器系统

    C/C++简单音乐播放器系统 程序设计题 1:简单音乐播放器系统 出题人:吴敏 面向专业:计算机科学与技术 难度等级:4 1 问题描述 编写一个简单音乐播放器软件,实现歌单文件的浏览,点歌,加入收藏夹 ...

  9. C#简单音乐播放器(三)

    简单音乐播放器(三) [上一篇]简单音乐播放器(二) 一.前言 时隔一年,终于回来填坑了.前段时间把这个以前写的东西拿出来大改了UI,然后用去作为数字媒体开发课的作业交了,课上演示效果还不错.因为到了 ...

  10. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

最新文章

  1. pyhton url参数和字典互转
  2. python web 框架(八)-- Scrapy
  3. vue 动态变量名_【告别复制粘贴】动态模板生成小技巧
  4. 各个层次的gcc警告
  5. 路由转发采用递归查询
  6. 干货来袭!java从入门到精通第五版pdf
  7. 交通流理论学习(Introduciton)
  8. Sublime Text安装与配置
  9. ESET NOD32最新单机、企业中、英文版 + 个人专有ID(90天使用期)申请方法
  10. html img标签alt属性吗,img标签可以不用alt属性吗
  11. 重启网卡提示Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization.
  12. 解决云服务器添加了安全组端口无法访问问题
  13. python程序设计实用教程答案_Python程序设计实用教程
  14. 从个人邮箱登录页面进入后,邮箱如何撤回邮件?
  15. ubuntu mongo数据库无缘无故丢失了?如何保护mongoDB的数据。
  16. 如何用好你的高端内存条?什么是XMP?
  17. 知识付费系统源码下载带课程数据+一键同步功能和更新设置
  18. RBF神经网络基本思想
  19. Android实现SIM卡2拨打,android – 在双SIM卡设备中使用指定的SIM拨...
  20. npm ERR cb() never called报错原因及解决办法

热门文章

  1. 帮豆包刷“天天爱消除”,“天天连萌(附java代码)
  2. iostat 命令详解
  3. 一款基于Kotlin+MVP+组件化的麻雀App(文末有彩蛋)
  4. AWS+OpenVINO|利用AWS SageMaker与英特尔®软硬件技术加快AI推理速度的步骤
  5. spring丶@produces注解-作用解答
  6. 3D打印机DIY(三)Y轴与热床安装
  7. 简单理解viterbi算法
  8. 从零开始实现递归神经网络——【torch学习笔记】
  9. 《孵化皮克斯》读书第四天(完结)
  10. 2020年,谁的2020不曲折呢