一、設計需求
隨著人們生活節奏不斷加快,需求也隨之增加。在Android應用設計中,音頻播放功能是一個必不可少的部分。而提升用戶體驗,實現Android音頻播放功能,是我們設計中最為重要的需求。
此處我們採用一個音樂播放器應用作為示例。在音頻播放器中,應具備以下4個方面的需求設計:
1. 播放進度條
2. 播放/暫停按鈕
3. 快進/快退按鈕
4. 歌曲列表
二、抽象設計
現在我們考慮如何通過代碼實現設計需求。為了實現4個需求,我們需要設計4個控制項:SeekBar(進度條控制項)、ToggleButton(播放/暫停按鈕控制項)、Button(快進/快退按鈕控制項)、ListView(歌曲列表控制項)。因此我們需要進行如下的抽象設計:
1. SeekBar:顯示當前播放進度,提供拖動、下滑等操作,來控制進度條的進度
2. ToggleButton:顯示當前播放狀態(播放/暫停),並可以在兩種狀態間進行切換
3. Button:提供快進/快退功能,在顯示區域上增加快進/快退的按鈕
4. ListView:顯示歌曲列表,方便用戶選擇播放
三、代碼實現
<SeekBar
android:id="@+id/seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="0"/>
<ToggleButton
android:id="@+id/togglebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="Pause"
android:textOff="Play"/>
<Button
android:id="@+id/fastforward"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=">>"/>
<Button
android:id="@+id/rewind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="<<"/>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
上述代碼實現了4個控制項的外觀,接下來需要實現它們的功能。首先,我們需要在Activity類中定義相應的變數:
private SeekBar mSeekBar;
private ToggleButton mToggleButton;
private Button mFastForward;
private Button mRewind;
private ListView mListView;
private MediaPlayer mMediaPlayer;
private AudioManager mAudioManager;
private ArrayList<Song> mSongs;
private int mSongIndex = 0;
接下來,我們需要進行小標題中的內容具體實現。
1、SeekBar
SeekBar代表播放進度條。我們需要在Activity中設置MediaPlayer的播放進度,以便定位到相應的播放位置。我們需要設置一系列函數來控制MediaPlayer並更新SeekBar:
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mSeekBar.setMax(mp.getDuration());
mp.start();
}
});
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (mMediaPlayer != null && fromUser) {
mMediaPlayer.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
if (mMediaPlayer != null) {
int mCurrentPosition = mMediaPlayer.getCurrentPosition();
mSeekBar.setProgress(mCurrentPosition);
}
mHandler.postDelayed(mRunnable, 1000);
}
};
2、ToggleButton
ToggleButton代表播放/暫停按鈕。播放和暫停功能使用MediaPlayer實現。
mToggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (mMediaPlayer == null) {
return;
}
if (isChecked) {
mMediaPlayer.start();
} else {
mMediaPlayer.pause();
}
}
});
3、Button
Button代表快進/快退按鈕。通過調整MediaPlayer的seekTo()方法來實現。
mFastForward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mMediaPlayer == null) {
return;
}
int currentPosition = mMediaPlayer.getCurrentPosition();
int duration = mMediaPlayer.getDuration();
if (currentPosition + mSeekBar.getMax() / 10 < duration) {
mMediaPlayer.seekTo(currentPosition + mSeekBar.getMax() / 10);
} else {
mMediaPlayer.seekTo(duration);
}
}
});
mRewind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mMediaPlayer == null) {
return;
}
int currentPosition = mMediaPlayer.getCurrentPosition();
if (currentPosition - mSeekBar.getMax() / 10 >= 0) {
mMediaPlayer.seekTo(currentPosition - mSeekBar.getMax() / 10);
} else {
mMediaPlayer.seekTo(0);
}
}
});
4、ListView
ListView代表歌曲列表。在Activity的onCreate()方法中設置ListView的適配器,並為ListView的ListItem添加事件監聽,以便播放相應的音頻文件。
mListView.setAdapter(new MusicListAdapter(this, mSongs));
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mSongIndex = position;
playSong(mSongs.get(mSongIndex));
mToggleButton.setChecked(true);
}
});
四、總結
除了上述4個方面,我們還需要注意一些細節問題,例如處理播放音頻過程中的異常、關閉MediaPlayer等問題。總之,在完成上述設計之後,用戶體驗得到了大幅提升,用戶數據反饋也更加積極。通過對Android音頻播放功能的設計,我們達成了提升用戶體驗的目標。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/158061.html