Android应用--简、美音乐播放器增加音量控制

2013年6月26日简、美音乐播放器继续完善中、、
题外话:上一篇博客是在6月11号发的,那篇博客似乎有点问题,可能是因为代码结构有点乱的原因,很难把握整体。整个应用的开发,周期太长了,有时候因为一些杂事未能抽出时间来继续开发,有时候又没有心情去做,所以一直拖。如果真正的开发让我拖那么久的话,早就成了死亡之旅项目了。作为一定独立开发者我是不合格的,还没有一个成熟的作品出来,一直想能做出个拿得出手的应用放上应用商店让所有人都能用到,但有心而力不从。不知道做什么是一个原因,个人水平也有限,杂事繁多时间安排不当。各种借口。不过,小巫会做一个独特的应用作为自己的毕业设计的,至于怎么独特还没有特别的思路。可能到时也会把自己的毕业设计作品整理成博客,让学习Android的朋友们参考参考。感谢网友们的一直支持。


有网友说要看Mp3Info类,在这里也就贴出来
package com.wwj.sb.domain;

/**
* 2013/5/7 mp3实体类
*
* @author wwj
*
*/
public class Mp3Info{
private long id; // 歌曲ID
private String title; // 歌曲名称
private String album; // 专辑
private String artist; // 歌手名称
private long duration; // 歌曲时长
private long size; // 歌曲大小
private String url; // 歌曲路径
private String lrcTitle; // 歌词名称
private String lrcSize; // 歌词大小 public Mp3Info() {
super();
} /**
*
* @param id
* @param title
* @param album
* @param artist
* @param duration
* @param size
* @param lrcTitle
* @param lrcSize
* @param url
*/
public Mp3Info(int id, String title, String album, String artist,
int duration, int size, String lrcTitle, String lrcSize,
String url) {
super();
this.id = id;
this.title = title;
this.album = album;
this.artist = artist;
this.duration = duration;
this.size = size;
this.lrcTitle = lrcTitle;
this.lrcSize = lrcSize;
this.url = url;
} @Override
public String toString() {
return "Mp3Info [id=" + id + ", title=" + title + ", album=" + album
+ ", artist=" + artist + ", duration=" + duration + ", size="
+ size + ", url=" + url + ", lrcTitle=" + lrcTitle
+ ", lrcSize=" + lrcSize + "]";
} public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getAlbum() {
return album;
} public void setAlbum(String album) {
this.album = album;
} public String getArtist() {
return artist;
} public void setArtist(String artist) {
this.artist = artist;
} public long getDuration() {
return duration;
} public void setDuration(long duration) {
this.duration = duration;
} public long getSize() {
return size;
} public void setSize(long size) {
this.size = size;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} public String getLrcTitle() {
return lrcTitle;
} public void setLrcTitle(String lrcTitle) {
this.lrcTitle = lrcTitle;
} public String getLrcSize() {
return lrcSize;
} public void setLrcSize(String lrcSize) {
this.lrcSize = lrcSize;
} }


这篇博客要增加的功能是控制音量,其实已经非常简单了,不过这里用到了动画还是可以用来讲讲的。

运行效果截图:

    
 
 


点击左下角的那个音频按钮就可以显示出控制音量的面板,滑动拖动条就可以控制音量了。

控制音量面板的布局代码:
<RelativeLayout
android:id="@+id/ll_player_voice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/header_layout"
android:background="@drawable/player_progresslayout_bg"
android:visibility="gone" > <ImageView
android:id="@+id/iv_player_min_voice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="@drawable/volume_min_icon" /> <ImageView
android:id="@+id/iv_player_max_voice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/volume_max_icon" /> <SeekBar
android:id="@+id/sb_player_voice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/iv_player_max_voice"
android:layout_toRightOf="@id/iv_player_min_voice"
android:background="@drawable/voice_seekbar_bg"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:progressDrawable="@drawable/voice_seekbar_progress"
android:thumb="@drawable/voice_seekbar_thumb" />
</RelativeLayout>

/drawable/voice_seekbar_progress.xml
这个用来显示进度条,用到了图层资源
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background"
android:drawable="@drawable/voice_seekbar_bg">
</item>
<item android:id="@android:id/progress">
<clip android:drawable="@drawable/voice_seekbar_one" />
</item>
</layer-list>

/drawable、voice_seekbar_thumb.xml

拖动条滑块的选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/voice_thumb_press" />
<item android:drawable="@drawable/voice_thumb_normal" />
</selector>

写到这里,我想到了可能令开发者头痛的应该是没有合适的素材,其实这些素材并不一定要自己去做,况且也不一定能做到美观,也没那么多时间。所以我们可以就地取材,这时候反编译的技术就有用了,下载一些你认为你需要用到的素材的应用的APK文件,进行反编译,就可以得到大量的素材。把这些素材用到你的应用就行啦。反正小巫一直都是这么做的,小巫没办法自己去做。



接着:定义相应的变量
	private AudioManager am;		//音频管理引用,提供对音频的控制
RelativeLayout ll_player_voice; //音量控制面板布局
int currentVolume; //当前音量
int maxVolume; //最大音量
ImageButton ibtn_player_voice; //显示音量控制面板的按钮
SeekBar sb_player_voice; //控制音量大小
// 音量面板显示和隐藏动画
private Animation showVoicePanelAnimation;
private Animation hiddenVoicePanelAnimation;

获取对象
		showVoicePanelAnimation = AnimationUtils.loadAnimation(PlayerActivity.this, R.anim.push_up_in);
hiddenVoicePanelAnimation = AnimationUtils.loadAnimation(PlayerActivity.this, R.anim.push_up_out); //获得系统音频管理服务对象
am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
currentVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC);
maxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
sb_player_voice.setMax(maxVolume);




动画文件
puch_up_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="200"/>
<translate android:fromYDelta="-100%" android:toYDelta="0" android:duration="200"/>
</set>

push_up_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="200"/>
<translate android:fromYDelta="0" android:toYDelta="-100%" android:duration="200"/>
</set>



找到控件
ibtn_player_voice = (ImageButton) findViewById(R.id.ibtn_player_voice);
ll_player_voice = (RelativeLayout) findViewById(R.id.ll_player_voice);
sb_player_voice = (SeekBar) findViewById(R.id.sb_player_voice);

设置监听器
		ibtn_player_voice.setOnClickListener(ViewOnClickListener);
sb_player_voice.setOnSeekBarChangeListener(new SeekBarChangeListener());



ibtn_player_voice用来控制动画显示面板
			case R.id.ibtn_player_voice:	//控制音量
voicePanelAnimation();
break;

	//控制显示音量控制面板的动画
public void voicePanelAnimation() {
if(ll_player_voice.getVisibility() == View.GONE) {
ll_player_voice.startAnimation(showVoicePanelAnimation);
ll_player_voice.setVisibility(View.VISIBLE);
}
else{
ll_player_voice.startAnimation(hiddenVoicePanelAnimation);
ll_player_voice.setVisibility(View.GONE);
}
}



sb_player_voice用来控制音量大小
	/**
* 实现监听Seekbar的类
*
* @author wwj
*
*/
private class SeekBarChangeListener implements OnSeekBarChangeListener { @Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
switch(seekBar.getId()) {
case R.id.audioTrack:
if (fromUser) {
audioTrackChange(progress); // 用户控制进度的改变
}
break;
case R.id.sb_player_voice:
// 设置音量
am.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
break;
}
}


关于音量控制就是这么多内容了。下一篇会实现获取专辑图片的功能,可能会稍微改变一下界面。期待吧!






Android应用--简、美音乐播放器增加音量控制的更多相关文章

  1. Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)

    Android应用--简.美音乐播放器获取专辑图片(自定义列表适配器) 2013年7月3日简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词 ...

  2. Android基于发展Service音乐播放器

    这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activit ...

  3. 项目源码--Android类似酷狗音乐播放器

    下载源码 知识技能概要: 1.音乐文件的扫描与管理 2.音频流的解码 3. UI控件的综合使用 4.播放列表方式管理 5.随机播放方式 6.源码带详细的中文注释 ...... 详细介绍 1. 音乐文件 ...

  4. Android 仿百度网页音乐播放器圆形图片转圈播放效果

    百度网页音乐播放器的效果  如下 : http://www.baidu.com/baidu?word=%E4%B8%80%E7%9B%B4%E5%BE%88%E5%AE%89%E9%9D%99& ...

  5. Android应用开发--MP3音乐播放器代码实现(一)

    需求1:将内存卡中的MP3音乐读取出来并显示到列表当中 1.   从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3Info对象 2.   迭代List集合,把每一个Mp3 ...

  6. Android课程---简单的音乐播放器

    第一个:用Activity实现 activity_music_play1.xml <?xml version="1.0" encoding="utf-8" ...

  7. Android多媒体框架对音乐播放器的支持

    下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些.               1. MediaScannerReceiver                   这个广播接收者在接收到A ...

  8. Android音乐播放器的设计与实现

    目录 应用开发技术及开发平台介绍 应用需求分析 应用功能设计及其描述 应用UI展示 一.应用开发技术及平台介绍 ①开发技术: 本系统是采用面向对象的软件开发方法,基于Android studio开发平 ...

  9. 使用 原生js 制作插件 (javaScript音乐播放器)

    1.引用页面 index.html <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

随机推荐

  1. 从零开始PHP学习 - 第二天

    写这个系列文章主要是为了督促自己  每天定时 定量消化一些知识! 同时也为了让需要的人 学到点啥~! 本人技术实在不高!本文中可能会有错误!希望大家发现后能提醒一下我和大家! 偷偷说下 本教程最后的目 ...

  2. python学习【一】基础入门

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  3. 在Windows环境下部署Axis2/C服务

    Apache Axis2/C是C语言实现的网络服务引擎,基于Axis2架构,支持SOAP1.1和SOAP1.2协议,并且支持RESTful风格的Web service. 下面是本人在Windows 7 ...

  4. Qt双缓冲机制:实现一个简单的绘图工具(纯代码实现)

    http://blog.csdn.net/rl529014/article/details/51658350

  5. API各函数作用简介

    API各函数作用简介 1.控件与消息函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeI ...

  6. Java实现HTML转PDF的总结

    Java实现HTML转PDF的几种方法—主要解决中文乱码问题 第一:同事在做HTML转PDF中遇到乱码问题 ********************************************** ...

  7. jquery-plugin-biggerLink,highLight-层加亮_andy 阳光生活_百度空间

    How to get the xpath by clicking an html element How to get the xpath by clicking an html element Qu ...

  8. Android应用开发基础篇(4)-----TabHost(选项卡)

    一.概述 TabHost是一种用来显示标签的组件,不清楚?看一下来电通这个应用就知道了.这个组件用起来与其他组件不太一样,它需要继承TabActivity这个类,还有它的布局文件与我们平时用的也有些不 ...

  9. 纯代码 自己主动屏幕适配iPhone button

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2h1bmdlc2hpaHVhdGlhbg==/font/5a6L5L2T/fontsize/400/fil ...

  10. openstack 源码分析

    Nova对于底层Hypervisor(如KVM/QEMU等)的调用与管理主要通过LibvirtDriver类,nova/virt/libvirt/driver.py Libvirt对Hyperviso ...