Android构建音频播放器教程(二)
6. 为PlayList(播放列表)写ListView
使用列表视图(ListView)来显示播放列表,在drawable文件夹下创建一个xml布局文件并叫做list_selector.xml,这个xml是用于对列表项渐变背景。
list_selector.xml <?xmlversion="1.0"encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android">
<!-- Selector style for listrow -->
<item
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/gradient_bg"/>
<itemandroid:state_pressed="true"
android:drawable="@drawable/gradient_bg_hover"/>
<itemandroid:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/gradient_bg_hover"/>
</selector>
在drawable文件夹下创建一个xml布局文件并叫做playlist.xml,这个xml文件是为了显示列表视图。
playlist.xml <?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="#242424"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector"/>
</LinearLayout>
再在drawable文件夹下创建一个xml布局文件并叫做playlist_item.xml,这个xml文件是为单一列表项显示歌曲的标题。
playlist_item.xml <?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:background="@drawable/list_selector"
android:padding="5dp">
<TextView
android:id="@+id/songTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16dp"
android:padding="10dp"
android:color="#f3f3f3"/>
</LinearLayout>
通过使用以上布局我们可以实现以下列表视图通过将数据加载到它。
7. 写从SDcard读取mp3文件的类
到目前为止,我们已经完成了player的静态布局,现在的实际代码开始。创建一个新的类文件,并将其命名为SongsManager.java。这个类将从设备上的sdcard阅读所有的文件并且过滤只留带.mp3后缀的文件。
SongsManager.mp3 packagecom.androidhive.musicplayer;
importjava.io.File;
importjava.io.FilenameFilter;
importjava.util.ArrayList;
importjava.util.HashMap;
publicclassSongsManager {
// SDCard Path
finalString MEDIA_PATH = new String("/sdcard/");
privateArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
// Constructor
publicSongsManager(){
}
/**
* Function to read all mp3 files from sdcard
* and store the details in ArrayList
* */
publicArrayList<HashMap<String, String>> getPlayList(){
File home = new File(MEDIA_PATH);
if(home.listFiles(newFileExtensionFilter()).length > 0) {
for(File file : home.listFiles(newFileExtensionFilter())) {
HashMap<String, String> song = new HashMap<String, String>();
song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
song.put("songPath", file.getPath());
// Adding each song to SongList
songsList.add(song);
}
}
// return songs list array
returnsongsList;
}
/**
* Class to filter files which are having .mp3 extension
* */
classFileExtensionFilterimplements FilenameFilter {
publicbooleanaccept(File dir, String name) {
return(name.endsWith(".mp3") || name.endsWith(".MP3"));
}
}
}
8. 为PlayList写列表视图
为播放列表的列表视图创建一个新的活动类,叫做PlayListActivity.java ,PlayListActivity.java 这个类通过使用SongsManager.java类来显示歌曲列表。
PlayListActivity.java packagecom.androidhive.musicplayer;
importjava.util.ArrayList;
importjava.util.HashMap;
importandroid.app.ListActivity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.AdapterView;
importandroid.widget.AdapterView.OnItemClickListener;
importandroid.widget.ListAdapter;
importandroid.widget.ListView;
importandroid.widget.SimpleAdapter;
publicclassPlayListActi
补充:移动开发 , Android ,