Android 音乐播放器(暂停、下一首、上一首、进度条、拉动进度条)

2024-03-08 2024阅读

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。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]