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

这篇具有很好参考价值的文章主要介绍了Android 音乐播放器(暂停、下一首、上一首、进度条、拉动进度条)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.编写主页面,使用listview组件放置音乐列表信息

<?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"
    tools:context=".MainActivity"
    android:orientation="vertical"
    android:background="#D8D8D8">





    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/local"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:paddingBottom="20dp">
    <com.example.myapplication.MyListVIew
        android:id="@+id/video_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       />
        </LinearLayout>
    </ScrollView>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:id="@+id/local"
        android:background="#ECC8C8"
        android:layout_alignParentBottom="true">

        <ImageView
            android:id="@+id/img"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/bold"
            android:layout_marginLeft="10dp"
            android:layout_centerVertical="true"/>

        <TextView
            android:id="@+id/song"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="告白气球"
            android:layout_toRightOf="@id/img"
           android:layout_centerVertical="true"
            android:layout_marginLeft="20dp"
            android:textColor="#000"
            android:textSize="15sp"/>

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="周杰伦"
            android:layout_toRightOf="@id/img"
            android:layout_marginLeft="20dp"
            android:layout_below="@id/song"
            android:textColor="#000"
            android:textSize="12sp"
          />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_centerHorizontal="true">

        <SeekBar
            android:id="@+id/time"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:text="3:30"
            />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15sp"
                android:id="@+id/t2"
                android:layout_marginRight="20dp"/>
        </LinearLayout>
        <TextView
            android:id="@+id/next"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="下一曲"
            android:textSize="12sp"
            android:textColor="#000"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="10dp"/>

        <TextView
            android:id="@+id/stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="暂停"
            android:textSize="12sp"
            android:textColor="#000"
            android:layout_toLeftOf="@id/next"
            android:layout_centerVertical="true"
            android:layout_marginRight="20dp"/>

        <TextView
            android:id="@+id/up"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="上一曲"
            android:textSize="12sp"
            android:textColor="#000"
            android:layout_toLeftOf="@id/stop"
            android:layout_centerVertical="true"
            android:layout_marginRight="20dp"/>
    </RelativeLayout>



</RelativeLayout>

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<VideoBean> list;
    private Context context;

    public VideoAdapter(List<VideoBean> 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的子布局页面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@drawable/shape10"
        android:orientation="horizontal"
        android:paddingLeft="30dp"
        android:paddingRight="30dp">

        <TextView
            android:id="@+id/id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1"
            android:textSize="35sp"
            android:textColor="#000"
          android:layout_centerVertical="true"/>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_centerVertical="true"
            android:layout_marginLeft="50dp"
            >
            <TextView
                android:id="@+id/song"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="告白气球"
                android:textSize="25sp"
                android:textColor="#000"
                android:layout_gravity="center"/>
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_marginTop="10dp">


            <TextView
                android:id="@+id/singer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="许嵩"
                android:textSize="20sp"
                android:textColor="#000"
                android:layout_gravity="center"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="|"
                    android:textSize="20sp"
                    android:textColor="#000"

                    android:layout_marginLeft="10dp"
                    android:layout_gravity="center"/>

                <TextView
                    android:id="@+id/album"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="专辑名称"
                    android:textSize="20sp"
                    android:textColor="#000"
                    android:layout_marginLeft="10dp"
                    android:layout_gravity="center"/>
            </LinearLayout>
        </LinearLayout>


        <TextView
            android:id="@+id/time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:layout_alignParentRight="true"
            android:text="4:20"
            android:textColor="#000"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="15dp"/>


    </RelativeLayout>

</LinearLayout>

下载几个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<VideoBean> 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 <0) {
                    id = data.size() - 1;
                }
                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);
            }
        });


        time.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if (mediaPlayer != null && fromUser) {
                    mediaPlayer.seekTo(progress);
                }
            }
            public void onStartTrackingTouch(SeekBar seekBar) {
                time.removeCallbacks(mRunnable);
            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                time.postDelayed(mRunnable, 1000);
            }
        });




    }
    private void init(){
        song=findViewById(R.id.song);
        name=findViewById(R.id.name);
        next=findViewById(R.id.next);
        stop=findViewById(R.id.stop);
        up=findViewById(R.id.up);
        time=findViewById(R.id.time);
        video_list=findViewById(R.id.video_list);
        t2=findViewById(R.id.t2);
    }


    private void isplaying(){
        if (mediaPlayer!= null) {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
                mediaPlayer.release();
                mediaPlayer = null;
            }
            mHandler.removeCallbacks(mRunnable);
            stop.setText("暂停");
        }
    }
}

文章来源地址https://www.toymoban.com/news/detail-838788.html

到了这里,关于Android 音乐播放器(暂停、下一首、上一首、进度条、拉动进度条)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Studio 实现音乐播放器

    🍅 文章末尾有获取完整项目源码方式 🍅         Android初学者开发第一个完整的实例项目应该就属《音乐播放器》了,项目包含SQLlit数据库的使用、listview、Fragment、等。话不多说先上成品: Android Studio 音乐播放器 图片效果展示: 1.启动页效果 2.登录页效果 3.注册页效果

    2024年02月06日
    浏览(45)
  • 基于android音乐播放器的设计

    本科毕业论文(设计)诚信声明 本人郑重声明:所呈交的毕业论文(设计),题目《………基于android音乐播放器的设计……………………………》是本人在指导教师的指导下,进行研究工作所取得的成果。对本文的研究作出重要贡献的个人和集体,均已在文章以明确方式注

    2024年02月03日
    浏览(45)
  • Android课程设计大作业-音乐播放器

    1)使用Service播放音乐 Android SDK提供了Service。Service有两种类型: 本地服务(Local Service):用于应用程序内部 远程服务(Remote Sercie):用于Android系统内部的应用程序之间前者用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单

    2024年02月10日
    浏览(40)
  • 小项目开发——Android 音乐播放器

    ◼ 音乐播放器 . ◼ 要求 : Activity 编程、 ListView 编程、 SeekBar 编程、 ExoPlayer 编程( 播放 、 暂停 、 停止 、 上一首 、 下一首 ),音乐文件放在 assets/music 目录下,界面自拟. ◼ 期望最终效果: ◼ 分别对应 activity_music_list.xml 、 activity_my_music_player.xml 的视图. ◼ 点击列表任

    2024年01月21日
    浏览(41)
  • Android手机开发课程设计之音乐播放器

    一、音乐播放器概述与分析 目前手机的音乐播放功能已经是大家比较关注的一个部分,不少在人在购买手机的时候都会关心手机的音乐播放的能力,这也足以看出目前大家对音乐播放功能的重视,所以一款性能良好的手机音乐播放器软件一定会受到欢迎。和传统的音乐播放器

    2024年02月05日
    浏览(51)
  • Android程序设计之音乐播放器实现

    基于MediaPlayer技术实现在线音乐播放器,播放在线音乐,后端使用SpringBoot将音乐存放在Tomcat服务器。app通过网络请求获取音乐,从而实现在线音乐播放。该项目分为用户端和管理员端 一、核心技术Service组件介绍 Service它可以在后台执行长时间运行操作而没有用户界面的应用组

    2024年02月04日
    浏览(51)
  • Android Studio初学者实例:仿网易音乐播放器

    本期带来的是以Service为主要的知识点的网易音乐播放器 看一下效果图  首先项目准备: 在res下新建raw文件夹,并在文件夹中添加喜爱的mp3音乐  OK,第一步,先写一个背景文件,在res/drawable文件夹中新建xml文件: btn_bg_selector.xml  编写主界面代码activity_main.xml 编写MusicServic

    2024年02月05日
    浏览(48)
  • Android Studio初学者实例:音乐播放器与Service学习

    本次一个案例实现的一个简单的音乐播放器 用到的知识点最主要的几点是:Service、handler(实现音乐播放的进度条更新与图片旋转)以及用于播放音频的MediaPlayer 看一下案例效果:  由于Service是Android的四大组件之一,Activity、Service等等一个重要知识点就是生命周期的问题,

    2024年02月03日
    浏览(45)
  • QT5.9实现一个视频播放器播放 暂停进度条

    参考博主 1https://blog.csdn.net/liji_digital/article/details/83691035 参考博主2https://blog.csdn.net/qq_41071706/article/details/89855986 通过选择按钮选择本地视频文件 点击播放按钮播放文本框中的文件(不支持其他类型文件的异常检测) 支持mp4 avi等等 如果不支持见参考博主2的内容 点击暂停按钮

    2023年04月22日
    浏览(44)
  • ffplay播放器剖析(7)----音视频暂停模块分析

    1.通过SDL触发事件调用toggle_pause 2.toggle_pause调用stream_toggle_pause 3.stream_toggle_pause修改暂停变量 这个函数可以知道,如果当前状态是暂停的话,那么就会进入if函数 看一下if函数流程,首先我们知道我们 is-frame_timer += av_gettime_relative() / 1000000.0 - is-vidclk.last_updated; 这个就是在之前的基

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包