大作业(一)之音乐播放器

来源:互联网 发布:数据分析师是什么专业 编辑:程序博客网 时间:2024/04/30 01:44

1播放器主界面:

Android 的每一个可视化界面,都有其的唯一的布局配置文件,该文件里面有各种布局方式, 和各种资源文件如图像, 文字,颜色的引用, 程序在运行时,可以通过代码对各配置文件进行读取。 这样就可以形成不同的可视化界面和炫丽的效果。 播放器主界面是一个 Activity ,Android 工程在每个activity 启动的时候会首先执行 Oncreate() 方法,如下代码:

@OverridePublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.play_rack);} 

该 方法 主要执 行界面 的初 始化操 作, Activity 有个设 置布 局的方法:

 Context.setContentView(layoutResID), 参数为资源 ID,该 Id 在工程目录 res/layout 下,主界面布局文件名为 play_rack 。

下面为 play_rack.xml 布局文件代码结构如下

<?xml version="1.0" encoding="utf-8"?><AbsoluteLayout> <LinearLayout ></LinearLayout> <SeekBar></SeekBar> <LinearLayout></LinearLayout></AbsoluteLayout>

在绝对布局 下嵌套两种线性布局 和,第一个 实现了标题和歌曲名的显示位置,通过 布局设置 绝对坐标来控制标题的位置。 每个布局内可以放置多种 Widget(窗体部件)例如:等。每个Widget内有多种属性, 可以设置该 Widget的坐标, 大小,背景和颜色等参数。在播放界面中,歌词显示为居中,实现方法代码如下: 

<LinearLayout android:orientation="horizontal"android:gravity="center"android:layout_height="wrap_content"android:layout_width="fill_parent"><TextView android:layout_height="wrap_content"android:textColor="#8deeee" android:id="@+id/lrcText"android:layout_width="wrap_content"></TextView></LinearLayout> 

属性:

orientation="horizontal" :此线性布局的子部件为水平方式布局

Layout_width="fill_content" :布局的宽度为填满父布局

Layout_height="wrap_content" :布局的高度子由窗体的大小决定窗体TextView 文本 :

textColor="8deeee" 设置文本显示的颜色 RGB为"8deeee"TextSize 为默认大小

不管是从界面外观还是从功能上, 系统自带的 SeekBar往往不能满足用户的需要。所以我在这里自定义了一个音轨 SeekBar,

在play_rack.Xml 配置文件中, SeekBar的代码如下:

<SeekBar android:id="@+id/seekbar" android:layout_width="245px"android:layout_height="20px"android:layout_x="40px" android:layout_y="260px"android:progressDrawable="@drawable/seekbar_style" android:thumb="@drawable/thumb"android:paddingLeft="18px"android:paddingRight="15px"android:paddingTop="5px"android:paddingBottom="5px" android:progress="0"android:max="100" android:secondaryProgress="0"></SeekBar> 

上面代码中有参数 android :thumb="@drawable/thumb" 为音轨游标的图片资源 android :progressDrawable="@drawable/seekbar_style" 为SeekBar条的风格 style 。引用了 drawable 中的seekbay_style.xml 文件,seekbay_style.Xml 是自定义的配置文件,算法如下:

<?xml version="1.0" encoding="utf-8"?><layer-listxmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@android:id/background"><shape><corners android:radius="5dip" /><gradientandroid:startColor="#ff9d9e9d" android:centerColor="#ff5a5d5a"android:centerY="0.75" android:endColor="#ff747674"android:angle="270" /></shape></item><item android:id="@android:id/secondaryProgress"><clip><shape><corners android:radius="5dip" /><gradient android:startColor="#80ffd300"android:centerColor="#80ffb600" android:centerY="0.75"android:endColor="#a0ffcb00" android:angle="270" /></shape></clip></item><item android:id="@android:id/progress"> <clip><shape><corners android:radius="5dip" /><gradientandroid:startColor="#ff0099CC"android:centerColor="#ff3399CC"android:centerY="0.75"android:endColor="#ff6699CC"android:angle="270" /></shape></clip></item></layer-list>
配置文件中三个 Item项依次决定了 SeekBar的三层背景,从最下层的灰色到最上层的蓝色。通过各种属性设置了 SeekBar的倾斜度,两端圆半径,角度,中心位置,起始,中心和结束的颜色,游标的起始位置。

  通过这些属性设置,就自定义一个的 SeekBar音轨.。

音轨对象 SeekBar在歌曲刚开始播放的时候调用方法SeekBar.setMax() ,参数传入歌曲的长度。 SeekBar.setProgress(1) 设置游标的起始进度为 1。然后程序运行如下代码:

private Runnable thread_One = new Runnable() {// 线程public void run() { int currently_Progress = seekBar.getProgress() + 1000; seekBar.setProgress(currently_Progress);currently_Time.setText(getFileTime(mplayer.getCurrentPosition())); showLrcTwo(lrc_time,lrc_word);handler.postDelayed(thread_One, 1000);}}; 

Android 的线程的开始是通过 Handler 类来进行的, Handler 类是线程与线程之间通信的桥梁,实现 Runnable接口会实现里面的 run方法,当线程开始的时候, Runnable中的run方法会向 Handler 发一个 Message消息。

这样,Handler 类就可以接收到 run方法发送过来的不同的消息进行不同的代码处理。这样就达到了各线程之间的通信。要启动一个线程调用 Handler 的方法postDelayed (Runnable,1000)表示线程睡眠时间是 1000ms 。

以上代码意思是让播放歌曲的线程每隔 1000ms,即每 1秒对音轨的TextView重新设置时间且让进度条前进 1秒的进度。对音轨进行刷新。这样就实现了歌词同步功能 SeekBar有一个监听器,该监听器的作用是一直保持着对进度条的监听,当我们用鼠标向 SeekBar的各位置进行点击时,它会自动监听其位置, 进行相应的位置显示。

 这也是进度条上的游标会不停的移动和歌词时间会不停的变动的原因。



0 0
原创粉丝点击