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"><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@id/local" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.example.myapplication.MyListVIewandroid:id="@+id/video_list"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout></ScrollView><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="70dp"android:id="@+id/local"android:background="#ECC8C8"android:layout_alignParentBottom="true"><ImageViewandroid:id="@+id/img"android:layout_width="40dp"android:layout_height="40dp"android:src="@drawable/bold"android:layout_marginLeft="10dp"android:layout_centerVertical="true"/><TextViewandroid:id="@+id/song"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="告白气球"android:layout_toRightOf="@id/img"android:layout_marginTop="20dp"android:layout_marginLeft="20dp"android:textColor="#000"android:textSize="15sp"/><TextViewandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="周杰伦"android:layout_toRightOf="@id/img"android:layout_marginTop="40dp"android:layout_marginLeft="20dp"android:textColor="#000"android:textSize="12sp"/><TextViewandroid:id="@+id/time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="3:30"android:layout_centerVertical="true"android:layout_centerHorizontal="true"android:textColor="#000"android:textSize="12sp"/><TextViewandroid: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"/><TextViewandroid: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:enabled="false"android:layout_marginRight="20dp"/><TextViewandroid: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;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="100dp"android:background="@drawable/shape10"android:orientation="horizontal"android:paddingLeft="30dp"android:paddingRight="30dp"><TextViewandroid: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"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:layout_centerVertical="true"android:layout_marginLeft="50dp"><TextViewandroid: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"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_marginTop="10dp"><TextViewandroid: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"/><TextViewandroid: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"/><TextViewandroid: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><TextViewandroid: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.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private TextView song,name,next,stop,up,time;private ListView video_list;private List<VideoBean> data;private MediaPlayer mediaPlayer;private int num=0;private int id=0;@Overrideprotected 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));data.add(new VideoBean(4,"白色恋人","游鸿铭","游鸿铭","4:48",R.raw.a4));data.add(new VideoBean(4,"白色恋人","游鸿铭","游鸿铭","4:48",R.raw.a4));video_list.setAdapter(new VideoAdapter(data,MainActivity.this));video_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {VideoBean bean=data.get(position);song.setText(bean.getSong());name.setText(bean.getSinger());time.setText(bean.getTime());if (mediaPlayer != null) {if (mediaPlayer.isPlaying()) {mediaPlayer.stop();}mediaPlayer.release();mediaPlayer = null;}mediaPlayer=MediaPlayer.create(MainActivity.this,bean.getPath());mediaPlayer.start();stop.setEnabled(true);}});stop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {num++;if (num%2==1){mediaPlayer.pause();stop.setText("开始");}else if (num%2==0){stop.setText("暂停");mediaPlayer.start();}}});next.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {mediaPlayer.reset();id = (id % data.size()) + 1;if (id >= data.size()) {id = 0;}VideoBean bean = data.get(id);song.setText(bean.getSong());name.setText(bean.getSinger());time.setText(bean.getTime());mediaPlayer = MediaPlayer.create(MainActivity.this, bean.getPath());mediaPlayer.start();// 恢复“暂停”按钮的文本,因为我们现在正在播放新的歌曲stop.setText("暂停");stop.setEnabled(true);}});up.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mediaPlayer.reset();id = id-1;// 如果索引超出了列表大小,将其重置为0(列表的第一首歌曲)if (id <0) {id = data.size() - 1;}VideoBean bean = data.get(id);song.setText(bean.getSong());name.setText(bean.getSinger());time.setText(bean.getTime());mediaPlayer = MediaPlayer.create(MainActivity.this, bean.getPath());mediaPlayer.start();// 恢复“暂停”按钮的文本,因为我们现在正在播放新的歌曲stop.setText("暂停");stop.setEnabled(true);}});}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);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用postman测试若依其他业务接口API—3

请求方式 如上&#xff0c;使用Get请求来获取练习题库中的所有习题数据。 请求地址 在请求路径栏输入请求地址&#xff0c;以下图为例&#xff1a; 参数体与鉴权 在Parms键入所需参数&#xff0c;其中key为键,value为键的值&#xff1a;如下图所示&#xff1a; 认证成功与失…

持续集成(CICD)- gogs仓库的部署和使用

文章目录 一、gogs的介绍二、部署gog仓库三、首次启动gogs四、登录五、创建一个非空仓库六、从仓库拉取代码到本地七、把本地编辑的代码上传到仓库 一、gogs的介绍 Gogs作为一个轻量级、易于部署和使用的自托管Git服务&#xff0c;为小型团队和个人开发者提供了一个简单而强大…

【AIGC】如何提高Prompt准确度

前言 随着人工智能的迅猛进展&#xff0c;AIGC&#xff08;通用人工智能聊天工具&#xff09;已成为多个行业中不可或缺的自然语言处理技术。Prompt作为AIGC系统的一项关键功能&#xff0c;在工具的有效运作中发挥了举足轻重的作用。本篇文章将深入探讨Prompt与AIGC之间的紧密…

python笔记_程序流程控制2

C&#xff0c;循环控制 1&#xff0c;for循环 功能&#xff1a;让代码循环运行 语法&#xff1a; for <变量> in <范围、序列>&#xff1a; <循环操作语句> 例 nums &#xff08;1,2,3,4&#xff09; <class list> for i in nums&#xff1a; print&…

Java中文件的相关知识及文件IO操作

在我们日常生活中&#xff0c;会把许多东西都称之为文件。比如&#xff0c;一份纸质报告&#xff0c;或u盘中的一些文档&#xff0c;都会把它们称为文件。那么&#xff0c;这里说的文件是以操作系统的角度出发的。在操作系统中&#xff0c;会把许多硬件设备和软件资源都抽象成“…

ubuntu20.04安装nvidia驱动真实有效(被折磨了一天一夜的肝文!!!)

ubuntu20.04安装nvidia驱动真实有效 安装前后需要注意的安装nvidia驱动的教程 安装前后需要注意的 能找到这篇帖子说明你之前肯定有过无数次方法的尝试&#xff0c;这些尝试可能会影响下面教程的有效 1.下面这个指令可能会导致ubuntu内核的更新。内核更新可能会导致你的nvidia…

机器学习:主成分分析笔记

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种无监督的机器学习算法&#xff0c;通常用于高维数据的降维、提取主要特征、数据降噪和可视化。PCA的基本思想是将原始数据的多个变量转换为少数几个相互独立的变量&#xff08;即主成分&a…

shadertoy 游戏《来自星尘》摇杆复刻

正确的做法应该是上 noise 而不是叠加 sin 波&#xff0c;不过如果不想麻烦的话叠波还是一个不错的选择&#xff1a;整体效果如下&#xff0c;已经非常形似 直接上链接&#xff1a;Shader - Shadertoy BETA float radiusScale 0.9; float variation(vec2 v1, vec2 v2, float …

node.js 封装分页查询

node.js封装sql分页查询 方法&#xff1a; /*** 生成分页查询sql* param {string} table 表名* param {number} pageNum 分页页数 * param {number} pageSize 分页条数 * param {object} query 查询对象 例&#xff1a;{id:1,name:小明}* returns sql语句*/ const limit (ta…

Java零基础-反射

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

springboot/ssm供应商管理系统Java货物进销存管理系统web

springboot/ssm供应商管理系统Java货物进销存管理系统web 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysq…

传感器---触摸传感器

一、模块选型概述 芯片型号&#xff1a;TTP223B 供电电压&#xff1a;3-5V 控制接口&#xff1a;共三个引脚&#xff08;GND、VCC、SIG&#xff09;&#xff0c;GND为地&#xff0c;VCC为供电电源&#xff0c;SIG为数字信号输出脚&#xff1b; PCB尺寸&#xff1a;24 x 24 mm 触…

图像传感器与信号处理——SFR算法/ISO 12233解读

图像传感器与信号处理——SFR算法/ISO 12233解读 图像传感器与信号处理——SFR算法/ISO 12233解读 1. 前言 2. 基于视觉的分辨率测量方法 3. 基于边界的SFR算法 4. 基于正弦波的SFR算法 图像传感器与信号处理——SFR算法/ISO 12233解读 SFR的全称是Spatial Frequency Response&…

蓝桥集训之统计子矩阵

统计子矩阵 核心思想&#xff1a;矩阵前缀和 双指针 用i和j双指针 遍历所有子矩阵的列用s和t双指针 遍历所有子矩阵的行求其子矩阵的和 若>k 将s向下移动 矩阵和必定减小(元素个数减少)直到满足<k 因为列一定 行数即为方案数(从t行往上数到s行 共t-s1个区间[t,t][t-1,t]…

PESTEL分析

PESTEL分析是一种用于评估宏观环境对组织或企业的影响的工具。PESTEL是对政治、经济、社会、技术、环境和法律六个方面进行分析的首字母缩写。 - 政治因素&#xff08;Political&#xff09;&#xff1a;涉及政府政策、政治稳定性、法律和法规等因素对企业的影响。 - 经济因素&…

Linux中服务端开发

1 创建socket,返回一个文件描述符lfd---socket(); 2 将lfd和IP&#xff0c;PROT进行绑定---bind(); 3 将lfd由主动变成被动监听---listen(); 4 接收一个新的连接&#xff0c;得到一个的文件描述符cfd--accept() --该文件描述符用于与客户端通信 5 while(1) { 接受数据&a…

MySQL——存储引擎

存储引擎 InnoDB 是 MySQL 默认的存储引擎&#xff0c;只有在需要它不支持的特性时&#xff0c;才会考虑其他存储引擎 实现了 4 个标准的隔离级别&#xff0c;默认级别可重复度。在可重复度隔离级别下&#xff0c;通过 MVCC 间隙锁防止幻读 主索引是聚簇索引 内部做了很多…

Docker 日志存储大小限制,默认会充爆磁盘

背景 在容器化部署的时候&#xff0c;因为没有指定日志的最大存储时间&#xff0c;导致磁盘被充爆。查看日志 一般使用docker logs -f --tail 行数 容器名称 来查看容器的运行日志&#xff0c;但是在容器被初始化的时候&#xff0c;需要指定日志的最大存储时间&#xff0c;因为…

React学习笔记

1、React初步认识 React构建Web和原生交互界面的库,相较于其它前端框架的优势,具有丰富的生态跨平台支持。 1.1、React的开发依赖 开发React必须依赖三个库: react:包含react所必须的核心代码;react-dom:react渲染在不同平台所需要的核心代码 ;babel:将jsx转换成Rea…

白云山板蓝根,一年四季都得备着

上班半年&#xff0c;每天都感觉在行尸走肉&#xff0c;长时间地坐在电脑前真的不行&#xff01;身体越来越差&#xff0c;面相也越来越糟糕&#xff0c;不仅有黑眼圈&#xff0c;痘痘也冒出来了不少&#xff0c;堪比整容&#xff0c;朋友们都纷纷调侃我&#xff0c;说我上半年…