火山PC制作音乐播放器,在这一节课当中将带领大家从零开始制作一个音乐播放器,能实现一些音乐的播放,那么具体我们来看一下本历程说明使用火山打造一款MP3播放器,具有……
火山PC制作音乐播放器,在这一节课当中将带领大家从零开始制作一个音乐播放器,能实现一些音乐的播放,那么具体我们来看一下本历程说明使用火山打造一款MP3播放器,具有播放音乐进度选择、暂停、上一曲下一曲等功能,该软件综合性较强,希望大家认真学习。本历程将分为两课,本课的内容着重介绍界面的布局和控件的一些操作啊制作。
下面我们先来看一下我们这个软件实际的一个效果。
那么这里呢,已经打开了一个软件,那么界面的效果呢,就是这个样子,我们这里呢,点击右键可以选择添加音乐,那么这里呢,我们将提前准备好的音乐放进来,那么当我们选中音乐的时候,点击播放,那么它就会那么它就会开始播放,那么当我们点击暂停之后,就会暂停播放,那么这里呢,我们这个是支持进度的,大家看一下啊。
我们这个是支持这样的一个进度拖动选择,而且呢,在播放的途中,他也会实时的去修改当前播放的进度,那同样的我们这个还支持上一首下一首好。
那么我们要看的就是按钮,大家注意到这个按钮呢,它是上面有了图片,那么实际上呢,这个按钮也是普通的按钮,只是我们使用了图片这样的一个属性。
然后呢,上面这个是列表框,这个大家一看呢,可能就会知道,上面这里是列表框,就是用来显示所有我们已经导入的歌曲。
因为我们刚才导入的时候,大家发现啊,这个地方呢,有一个这样的一个选择框,对吧,有这样一个能选择的对话框,那么实际上呢,它是我们的通用对话框,它就是支持我们选择文件,然后记录文件路径,通过路径呢,我们就可以将所有的文件一一的导入到我们的列表框当中。
好,再往下看,下面这里是滑块条,滑块条呢,同时可以设置它的位置,那么就是也就是我们展示进度的时候,它会随着每一秒,然后自动去往前走,达到这样的一个进度播放的效果,同时我们拖动它的时候,大家会发现拖动的时候音乐就播放的进度就随之发生改变,这个呢使用的就是我们点击它的时候,会有一个未知被改变的事件,这个我们在写代码的时候就具体来看。
然后这里右键是菜单,右键弹出右键菜单,我们根据菜单的内容就可以选择我们需要进行的一个操作,那这里呢,我可以把音乐删除,这里会询问是否删除,那么这个就是删除音乐,然后呢,播放我们就可以指定播放,这一个停止呢,就是停止当前播放。
这个是菜单相关操作,那么下面进度条这里呢,使用的是一个时钟,通过时钟我们每隔一秒钟就可以获取一次当前音乐播放的进度,然后我们再根据这个进度来动态的进行显示。那这一节课的主要目标,我们先将这个界面画出来,我们现在呢,准备开始画界面,我们打开火山。
然后打开我们之前的课程,那么这里呢,我已经提前添加好了一个第16课,那现在呢,我们就直接开始编写这个窗口的一个布局。
好,我们现在先把火山放小一点,我们就是要参照我们之前的这个演示的MP3程序,将我们的窗口设计成跟它差不多一样,好,我们把窗口缩小一点。
然后左上角这个是标签,用来指示当前这个是播放列表。
我们可以把它小一点,然后是列表框,这个列表框就是用来显示所有音乐的,我们现在添加一个列表框修改一下它的名称叫做播放列表。
接下来呢,这个是三个按钮。
放个普通的按钮。
啊,我们可以添加添加成啊36吧。
这个大小呢,到时候我们可以再根据图片调一下,一会呢,我们就要把它上面设置上图片。
或者我们可以直接写成40乘40啊,这都是可以的。
然后我们将按钮复制三个。
分别是对应的上一曲播放和下一曲,同样的,我们也要改一下它的标题,上一曲。
这个是播放,这个是下一曲,三个按钮。
至于怎么设置它的图片呢?我们一会通过代码的形式来进行设置,现在我们继续向下添加,这个是滑块条,所以我们选中滑块条,放一个滑块条出来。
最下方这个用来计时的呢,是一个小标签,所以这里呢,我们放一个标签在这里用来计时,同样的改一下它的名字叫时间显示。
这样我们的界面就设计完了,我们可以直接点击确定,这个时候呢,会自动加入一些代码,然后我们需要将我们的这个图片啊,导入到我们的这个火山当中,那么这个图片去哪里找呢?啊,大家可以到一个专门放图片的这样的一个网站。
大家看到这个啊,阿里巴巴矢量图标库,可以来这里下载到需要的图标,例如说我们现在这里需要播放图标,直接搜索播放就可以得到很多播放的图标,那么当下载的时候呢,只需要登录账号即可,登录之后呢,就可以进行下载了。
现在呢,这里我已经下好了几个,我们可以直接拿过来用一下。
往前提前看一下播放按钮,上一曲、下一曲跟暂停下载下来的图标是编辑格式,我们可以通过格式工厂或者其他看图工具将图标转换为指定的这个BMP格式。
那现在这我已经转换好了,我们就将图标放入到我这个代码的这个目录当中,这边呢,新建一个img,然后将图片放入到里面,放到我们自己的这个目录下面,这个时候呢,我们需要将图片添加到我们的这个代码,或者说添加到我们的这个工程当中。
我们可以这样来做,因为图标它不会随便去更改,我们可以让他以常量的方式导入进来,这里呢,我们叫做图片上一曲,类型呢,这里注意类型,我们需要选择位图资源,然后初始值,这里呢,我们直接选中刚刚的图标。
上一曲。
它会自动的将路径转换为相对路径,然后我们再来做播放,同样的是位图资源,这里呢,我们依然选择。
播放。
然后就是暂停,暂停。
我们先把暂停的图标放进来,因为播放的时候,当音乐响起之后,我们就这个图标呢,就会变成暂停。
所以呢,我们要同时准备两份图标,最后一个是下一曲,下一曲同样也是位图资源,在这里我们也将为图资源导入。
下一句,好,现在我们就已经将四个图标导入到我们的程序当中,我们现在要做的就是将我们的这个图标资源复制给我们按钮,这个时候我们打开窗口,当窗口创建完毕的时候,我们将这个图标赋值给按钮。
创建完毕,这里呢,我们就将按钮赋值好上一取点图片,大家注意这里用的是图片,所以呢,我可以将图片上一曲复制给他,那么因为图片需要的呢,就是位图资源,而我们刚刚导入的图标也是为图资源,所以就能进行导入,然后是播放,播放一开始我们需要的就是播放,也就是对普通的这个播放图片。
最后下一曲同样的是下一曲,好,现在我们先运行看一下效果。
看看我们这个图标是不是正常,好,大家现在看到这个效果,我们的图标正常的显示在了按钮之上。
正常的显示在了按钮之上,而且呢,由于这个系统有一些特特殊的操作,所以呢,我们会看到这样的一个动画效果。
就是当鼠标移上去之后。
这里我们是将这个图,呃,图标添加完毕,那么接下来呢,我们还要再看一看窗口当中还少了哪个东西。
那么因为前面我们提到有一个计时这样的一个作用,所以说呢,在窗口当中我们还要添加一个时钟组件,这个组件是不会直接显示出来的,但是呢,它也是真实存在的,它的作用呢,就是每隔一段时间触发一个事件,每隔的时间就叫做时钟周期,时钟周期现在呢,我们先把它添加上来,先不着急看它的周期事件,我们点击确定。
好,保存一下。接下来我们要先设计一个右键菜单,因为大家看到了这个地方有一个右键菜单,负责音乐的播放、停止、导入、删除,现在我们也要插入一个右键菜单来模拟这些操作,现在我们点击右键选择插入,在最下方有一个插入特定内容菜单,就在这个地方啊。菜单在这个地方是菜单类,点击添加之后会新建菜单类这样的一个类,我们直接在类名上面点击右键,选择打开菜单设计器,这个时候我们就能看到菜单了,我们就可以在这里编写我们的菜单。那么菜单的话,大家需要注意一点,在外面显示的我先把它关掉,在外面显示的这第一集这个是顶级的菜单,那么当我们点了之后,它会展开一个,那么这个呢,是它的一个紫菜。
单那么有些上面有箭头,大家看到箭头下面又会有一个菜单,那么这个又是它的准菜单,所以菜单是这种一级一级的,嗯,大家可以看到它是一级一级这样的一个形式的。
所以呢,这里就来带大家来认识一下如何添加多级的菜单,我们还是打开菜单设计器,首先我们先写一个顶级菜单,顶级菜单我们可以给它取一个名字,因为它的作用是列表框上面的右键会弹出来,我们叫做列表框右键菜单。
那么当你写完之后,你看到这个菜单的名字出现在上面的这个地方,它是在最左侧,就表示它是一个顶级菜单,如果你想在顶级菜单后面插入一个子菜单,应该怎么办呢?我们可以点击向后插入,然后使用右移,当右移之后,大家注意这里面就出了几个点,这个点呢,就表示当前的这个菜单是上一级的子菜单,那么子菜单这里呢,我们就可以添加播放音乐。
停止播放,接下来呢,大家注意这里啊,有一个线啊,这个就叫做分割线。
分割线呢,就是这里我们直接选中它就可以了,然后我们继续向下添加添加音乐。
最后删除音乐,我们这个菜单呢,就设计完毕了,点击确定,大家看到自动创建了这样几个常量,而且创建了一个新的菜单类,那么这个类呢,就是我们刚才做好的那一个菜单,我们现在最大化菜单是在右键弹出,这个时候呢,我们就需要在列表框当中。
选中列表框,将它的右键事件呢,给它填写一些代码,这里我们可以直接选择列表框,鼠标右键被放开这个事件就表示当你的鼠标右键点击的时候,松手的那一刻,它会触发这个事件,那么一般菜单呢,都是在松手的一刻进行弹出的,这里呢,我们也不例外,我们也在松手的时候进行弹出,所以叫鼠标右键被放开,然后呢,我们可以判断一下来源对象,如果呢,是我们的列表框,我们再弹出我们的菜单,如果他点了别的列表框,就不谈去执行别的事件,那么当然这里呢,我们就只有一个列表框,所以我们判断一下,这只是一个好的习惯,我们可以直接使用弹出菜单这样的一个命令,那么大家需要注意,弹出菜单的第一个参数需要的是菜单类啊,大家注意,需要的是菜单类,那么这个菜。
三类是哪一个呢?就是我们刚刚添加的这一个,我们直接将菜单类一传递进去即可,然后需要横向和纵向位置,那么这个呢,在上面的事件参数都有,我们就可以直接用事件参数,因为当我们右键点击的时候,这个事件呢,会把我们的鼠标位置也一并的传过来,所以我们就能知道它的位置。现在呢,我们再来看一下效果,我们在这个上面呢,点击右键。
诶大家看到哎这个位置呢,好像有点不对是吧,他的位置跑到那边去了。
诶来看这个位置是不对的,所以呢,我们来检查一下这个位置有什么问题,那么这里的话呢,我们看一下它的这个定义啊,我们就会发现,如果说想在我们鼠标的位置弹出菜单,那么我们就不能填写后边的两个参数,那么这两个参数横向和纵向是相对于当前的这个列表框的,所以说列表框的横向和纵向是很小的,我们这里呢,要把它先删掉。
它会默认用我们鼠标位置,那么这个时候就没有错误了啊这个是需要注意的一个地方,不要搞错了它的位置。
我们现在可以弹出菜单了,但是呢,我们需要响应,因为菜单光弹出来肯定是不行的,我们还需要对菜单进行响应,那么响应菜单应该怎么做呢?我们回到我们的主窗口界面,选中我们的主窗口,在这里呢,要告诉大家,如果菜单响应需要在我的主窗口接收到命令这一个事件下面。
这个地方会返回,或者说会响应我们菜单被点击的事件,我们来看命令代码,这个命令代码存放的就是我们菜单的整数ID,大家看下边这些ID就是在这个时候进行使用的,我们现在呢,可以进行判断,如果。
命令代码等于我们可以一项一项来写,因为它是常量,所以自动是公开的菜单类一点播放音乐。
那么它就是播放音乐,我们可以在这里调试输出一下播放音乐,同时我们在添加,否则命令代码等于菜单类一点停止播放,停止播放继续,否则命令代码等于菜单类一点添加音乐我们就输出添加音乐,最后那就是删除音乐,删除音乐我们就输出删除音乐。好,下面我们来看一下代码是否正常。
好,我们改一下它的位置,好现在来运行。
现在我点击播放,大家看到这里输出了播放音乐停止。
添加。
删除。
好,那我们看到现在呢,我们的菜单也能够响应事件了。
那么到这我们做一个功能,添加音乐,添加音乐我们回到这里看一下,添加音乐这里呢,大家看到弹出了这样的一个对话框,这个对话框叫做通用对话框,通用对话框在火山当中是以一个类进行提供的,我们可以新建一个变量啊,叫做打开音乐对话框,然后我们就可以对它进行操作了。首先我们要看一下标题,这个标题呢,就是显示在上方,我这里呢,可以把它改成请选择音乐,然后我们继续。
嗯。
过滤器。
过滤器这个东西比较重要,是什么意思呢?像我们刚才看到的。
我点击添加音乐的时候,大家看其他的文件呢,是看不到的,只有我们这边的后缀星点MP3,也就是说后缀是MP3的音乐才会显示在这里,其他文件名或者说文件后缀只要不对的话呢,是不会进行显示的,这里呢使用的就是过滤器,我们看一下过滤器的定义。
仅适用于打开文件和保存文件过滤器。文本由单个或多个成对的文本串组成,注意这里要成对。
第一个就是显示在外面的,好比说文本文件括号星点TXT,那么这一堆都是显示在外面的,第二个才是通配符,也就是说星点TXT这个东西呢,就是通配符,所有的文本之间用竖线隔开,也就是说这个点,呃,这个地方呢,我们就需要对我们需要的进行编写,那么我们需要什么呢?我们需要MP3音乐文件,然后呢,这里呢,我们给用户提示一下啊,就是MP3。
或者说我们这里可以加个点,前面这一堆都是给用户看的,然后我添加一条竖线,竖线后边是给电脑看的,星点MP3,然后呢,如果说我们同时还要支持其他格式啊,例如说其他的,例如说wav,那这个是一个波形文件对吧,我们也可以叫做音乐文件,同样的是竖向,呃竖线星点wav这样的一个格式,这就是他的选择器啊,过滤器,过滤器会将其他类型全部过滤掉,只保留我们写的,或者说只保留他当前选中的。
然后呢,我们现在添加好了过滤器,我们怎么展示出刚才的这个代码选择窗口呢。
啊,这个文件选择窗口呢,怎么展示呢?这个时候我们就要用到一个命令打开,打开的话,这里大家看到可以打开一个,也可以打开多个,这里呢,我们用打开多个作为演示,首先一个是副窗口,副窗口是哪一个呢?我们看到主窗口接收到事件的时候,这个来源对象就是它的副窗口,所以呢,我们把它写在这里。
文本数组因为我们选择了多个文件,它要以数组的形式给我们返回回来,我们在上面新建一个变量,这个变量呢,我们就叫做音乐路径数组,我们使用文本数组类,然后呢,我们将这个变量传递进去,当命令执行完毕之后呢,就会将我们的这个路径传递过来。这个时候大家还需要注意一个问题,它的返回值是逻辑型,就表示当用户确实选择了文件的时候,就会返回帧,如果用户点击了否,也就是点击了取消,大家看这里有个取消,或者说直接关闭掉了这个对话框,那么它就会返回甲。
所以说如果我们要取这个路径,就一定要判断用户已经真正的选择了文件,所以这里呢,我们要判断一下它的返回值等于帧,等于帧之后,我们就可以将所有的路径全部输出了,那么这里输出呢,我们可以使用一个循环,我们可以从零开始,然后呢到目标值,目标值是什么?就是我们数组当中成元数循环变量,我们可以先写一个I一会定义递增值是一,然后呢,我们在上方定义这个I,就说这种循环结构啊,大家一定要把它记住啊,一定要记住,就是说能快写。然后呢,其次就是在如果看到的数组变量,一般来讲,接下来我们都要进行循环,然后取它的成员啊,这个大家可以记一下,这个都是比较固定的一些用法,在这里呢,我们先。
将每一个命令都,呃,每一个路径都输出来,那么成员就是音乐路径数组,我们之前的课程也有讲过,使用取成员命令就可以取得当前索引,未知的成员索引从零开始,那么依次往后加,加到什么时候呢?加到成员数减一啊,大家注意这里要减一,然后呢,我们来运行。
我们点击右键选择添加音乐,这个时候呢,大家看到这里呢,确实有我们的这个弹出的这个对话框,然后呢,我们将目录定位到桌面,选择音乐,大家看到MP3文件全部列在这里,如果我现在将选择器切换一下啊,过滤器切换一下,大家发现呢,这个地方的MP3就被过滤掉了,当我再次选择回来的时候,他又出现了。
就是这样的一个使用方法,下面呢,我们可以点击四个点击打开,大家看到这里呢,输出了三个。
好,那这里呢是不要减一的,因为是从零开始,我们这里可以不减一,它这样是一个小于的做法,好,我们再来一次。
好,现在就有四个了,这个循环的时候呢,是不需要减一的,因为它是判断一个小于。
好,那么最后一步,我们就要将我们这个音乐添加到我们的这个列表框当中,我们最后使用列表框播放列表点加入项目,加入的是哪一项呢?就是我们当前的这一个音乐项目输出我们就不要了,我们直接将它加入到列表框当中。
点击添加。
点击打开。
好,没有问题,大家看到现在呢,已经能正常的将我们的这个音乐呢,全部都添加进来。
好,那么这一节课呢,我们就介绍到这里,下一节课开始呢,我们将着重的实现功能啊着重的实现功能,那么这一节课呢,大家下去之后,先把这个界面画出来,然后呢,把这个添加音乐这一部分的代码写好。
还没有评论呢,快来抢沙发~