行业知识
Android 音乐播放器(暂停、下一首、上一首、进度条、拉动进度条)
2026-11-11 12:06:43
来源:互联网转载
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
上一篇:前端组件封装
下一篇:站点怎么上传word?