题外话:上一篇博客是在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" />

/drawable/voice_seekbar_progress.xm

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

l

这个用来显示进度条,用到了图层资源

<?xml version="1.0" encoding="utf-8"?>

<item android:id="@android:id/background"

android:drawable="@drawable/voice_seekbar_bg">

/drawable、voice_seekbar_thumb.xml

拖动条滑块的选择器

<?xml version="1.0" encoding="utf-8"?>

写到这里,我想到了可能令开发者头痛的应该是没有合适的素材,其实这些素材并不一定要自己去做,况且也不一定能做到美观,也没那么多时间。所以我们可以就地取材,这时候反编译的技术就有用了,下载一些你认为你需要用到的素材的应用的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);

动画文件

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐