Android 音乐播放器(暂停、下一首、上一首、进度条、拉动进度条)
1.编写主页面,使用listview组件放置音乐列表信息
2.写Bean类、Adapter适配器
package com.example.myapplication; import java.io.Serializable; public class VideoBean implements Serializable { private int id; private String song; private String singer; private String album; private String time; private int path; public VideoBean(int id, String song, String singer, String album, String time, int path) { this.id = id; this.song = song; this.singer = singer; this.album = album; this.time = time; this.path = path; } public String getTime() { return time; } public String getAlbum() { return album; } public int getId() { return id; } public int getPath() { return path; } public String getSinger() { return singer; } public String getSong() { return song; } }
package com.example.myapplication; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.TextView; import java.util.List; public class VideoAdapter extends BaseAdapter { private List list; private Context context; public VideoAdapter(List list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView==null){ convertView= LayoutInflater.from(context).inflate(R.layout.adaper_video,parent,false); } VideoBean bean=list.get(position); TextView id=convertView.findViewById(R.id.id); TextView song=convertView.findViewById(R.id.song); TextView singer=convertView.findViewById(R.id.singer); TextView album=convertView.findViewById(R.id.album); TextView time=convertView.findViewById(R.id.time); id.setText(bean.getId()+""); song.setText(bean.getSong()); singer.setText(bean.getSinger()); album.setText(bean.getAlbum()); time.setText(bean.getTime()); return convertView; } }
3.写listview的子布局页面
下载几个mp3音乐导入raw中
4.编写主页面java文件
package com.example.myapplication; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.media.MediaParser; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; import com.bm.library.PhotoView; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; public class MainActivity extends AppCompatActivity { private TextView song,name,next,stop,up,t1,t2; private ListView video_list; private List data; private MediaPlayer mediaPlayer; private int id=0; private SeekBar time; private Handler mHandler = new Handler(); private Runnable mRunnable = new Runnable() { @Override public void run() { if (mediaPlayer != null && mediaPlayer.isPlaying()) { int mCurrentPosition = mediaPlayer.getCurrentPosition(); // 获取当前播放位置 //总时长 int duration = mediaPlayer.getDuration(); // 计算剩余时长 int timeLeft = duration - mCurrentPosition; int minutes = timeLeft / 1000 / 60; int seconds = (timeLeft / 1000) % 60; t2.setText(String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds)); time.setProgress(mCurrentPosition); mHandler.postDelayed(this, 1000); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); data=new ArrayList(); data.add(new VideoBean(1,"七月上","Jam","七月上","3:10",R.raw.a1)); data.add(new VideoBean(2,"大摇大摆迎春来","大张伟","七月上","2:54",R.raw.a2)); data.add(new VideoBean(3,"抱歉","科德夏萍","陈慧琳","3:56",R.raw.a3)); data.add(new VideoBean(4,"白色恋人","游鸿铭","游鸿铭","4:48",R.raw.a4)); video_list.setAdapter(new VideoAdapter(data,MainActivity.this)); video_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { VideoBean bean=data.get(position); song.setText(bean.getSong()); name.setText(bean.getSinger()); isplaying(); mediaPlayer=MediaPlayer.create(MainActivity.this,bean.getPath()); mediaPlayer.start(); t2.setText("00:00"); time.setMax(mediaPlayer.getDuration()); mHandler.post(mRunnable); } }); stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mediaPlayer!=null) { if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); stop.setText("开始"); mHandler.post(mRunnable); } else { stop.setText("暂停"); mediaPlayer.start(); mHandler.post(mRunnable); } }else { Toast.makeText(MainActivity.this, "暂未播放音乐", Toast.LENGTH_SHORT).show(); } } }); next.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { isplaying(); id = (id % data.size()) + 1; if (id >= data.size()) { id = 0; } VideoBean bean = data.get(id); song.setText(bean.getSong()); name.setText(bean.getSinger()); mediaPlayer = MediaPlayer.create(MainActivity.this, bean.getPath()); mediaPlayer.start(); time.setMax(mediaPlayer.getDuration()); mHandler.post(mRunnable); } }); up.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { isplaying(); id = id-1; // 如果索引超出了列表大小,将其重置为0(列表的第一首歌曲) if (id
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理!
部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!