对于Listview的运用(仿MP3播放器)

刚学习android一个月,来写一些东西记录下自己的学习过程。

首先学习了XML的格式,之后如何设计个listview将mp3文件导入。

在扫描MP3本地文件时运用了数据库的代码。

public static List<Mp3Info> getMp3Infos(Context context) {
		Cursor cursor = context.getContentResolver().query(
				MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
				MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

		List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>();
		for (int i = 0; i < cursor.getCount(); i++) {
			cursor.moveToNext();
			Mp3Info mp3Info = new Mp3Info();

			long id = cursor.getLong(cursor
					.getColumnIndex(MediaStore.Audio.Media._ID)); // 音乐id
			String title = cursor.getString((cursor
					.getColumnIndex(MediaStore.Audio.Media.TITLE))); // 音乐标题
			String artist = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.ARTIST)); // 艺术家
			String album = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.ALBUM)); // 专辑
			String displayName = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
			long albumId = cursor.getInt(cursor
					.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
			long duration = cursor.getLong(cursor
					.getColumnIndex(MediaStore.Audio.Media.DURATION)); // 时长
			long size = cursor.getLong(cursor
					.getColumnIndex(MediaStore.Audio.Media.SIZE)); // 文件大小
			String url = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.DATA)); // 文件路径
			int isMusic = cursor.getInt(cursor
					.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); // 是否为音乐
			if (isMusic != 0) { // 只把音乐添加到集合当中
				mp3Info.setId(id);
				mp3Info.setTitle(title);
				mp3Info.setArtist(artist);
				mp3Info.setAlbum(album);
				mp3Info.setDisplayName(displayName);
				mp3Info.setAlbumId(albumId);
				mp3Info.setDuration(duration);
				mp3Info.setSize(size);
				mp3Info.setUrl(url);
				mp3Infos.add(mp3Info);
			}
		}
		return mp3Infos;
	}


 

之后还有对于适配器的首次运用

package com.example.copymp3;

import java.util.List;

import com.examole.bean.Mp3Info;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class Myadapter extends BaseAdapter {
	List<Mp3Info> songs;
	Context context;

	public Myadapter(List<Mp3Info> songs, Context context) {
		this.songs = songs;
		this.context = context;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return songs.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return songs.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		if (convertView == null) {
			convertView = LayoutInflater.from(context).inflate(
					R.layout.item_song, null);
		}//判断convertView 是否为空 如果为空则新建个layoutinflater,这样不会不断生产,导致程序过慢
		//以下都是item里面的样式
		ImageView image = (ImageView) convertView.findViewById(R.id.im_logo2);
		TextView songname = (TextView) convertView
				.findViewById(R.id.play_titlename);
		TextView art = (TextView) convertView.findViewById(R.id.play_artname);
		TextView totaltime = (TextView) convertView
				.findViewById(R.id.play_time);
//设置内容给item
		songname.setText(songs.get(position).getTitle());
		art.setText(songs.get(position).getArtist());
		totaltime.setText(MediaUtil.formatTime(songs.get(position).getDuration()));
		if (position == -1) {
			image.setImageResource(R.drawable.second);
		} else {
			Bitmap bitmap = MediaUtil.getArtwork(context, songs.get(position)
					.getId(), songs.get(position).getAlbumId(), true, true);
			if (bitmap == null) {
				image.setImageResource(R.drawable.second);
			} else {
				image.setImageBitmap(bitmap);
			}

		}

		return convertView;

	}
}


对于MP3播放器先要设计一个bean。

package com.examole.bean;

import java.io.Serializable;

/**
 * 2013/5/7 mp3实体类
 * 
 * @author wwj entery
 */
public class Mp3Info implements Serializable {
	/**
		 * 
		 */
	private static final long serialVersionUID = 1L;
	private long id; // 歌曲ID 3
	private String title; // 歌曲名称 0
	private String album; // 专辑 7
	private long albumId;// 专辑ID 6
	private String displayName; // 显示名称 4
	private String artist; // 歌手名称 2
	private long duration; // 歌曲时长 1
	private long size; // 歌曲大小 8
	private String url; // 歌曲路径 5
	private String lrcTitle; // 歌词名称
	private String 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 long getAlbumId() {
		return albumId;
	}

	public void setAlbumId(long albumId) {
		this.albumId = albumId;
	}

	public String getDisplayName() {
		return displayName;
	}

	public void setDisplayName(String displayName) {
		this.displayName = displayName;
	}

	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;
	}

}


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现一个 Android 音乐播放器ListView,可以按照以下步骤操作: 1. 创建一个包含音乐信息的类,例如 MusicInfo,它包含歌曲名称、歌手名、专辑图片等信息。 2. 在布局文件中添加一个 ListView 控件。 3. 创建一个适配器类,例如 MusicListAdapter,继承自 BaseAdapter,实现适配器的四个方法: getCount()、getItem()、getItemId() 和 getView()。 4. 在 getView() 方法中,使用 LayoutInflater 加载 item_music.xml 布局文件,设置歌曲名称、歌手名、专辑图片等信息。 5. 在主活动中,通过 ContentResolver 获取手机中的音乐文件,并将它们存储在 MusicInfo 类的 List 中。 6. 将 MusicInfo 列表设置为 MusicListAdapter 的数据源,然后将适配器设置为 ListView 的适配器。 7. 为 ListView 设置点击事件,当用户点击歌曲时,启动一个新的活动,播放该歌曲。 示例代码: MusicInfo.java ``` public class MusicInfo { private String name; private String artist; private Bitmap album; public MusicInfo(String name, String artist, Bitmap album) { this.name = name; this.artist = artist; this.album = album; } public String getName() { return name; } public String getArtist() { return artist; } public Bitmap getAlbum() { return album; } } ``` MusicListAdapter.java ``` public class MusicListAdapter extends BaseAdapter { private List<MusicInfo> musicList; private LayoutInflater inflater; public MusicListAdapter(Context context, List<MusicInfo> musicList) { this.musicList = musicList; inflater = LayoutInflater.from(context); } @Override public int getCount() { return musicList.size(); } @Override public Object getItem(int position) { return musicList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = inflater.inflate(R.layout.item_music, parent, false); holder = new ViewHolder(); holder.name = convertView.findViewById(R.id.name); holder.artist = convertView.findViewById(R.id.artist); holder.album = convertView.findViewById(R.id.album); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } MusicInfo music = musicList.get(position); holder.name.setText(music.getName()); holder.artist.setText(music.getArtist()); holder.album.setImageBitmap(music.getAlbum()); return convertView; } private static class ViewHolder { TextView name; TextView artist; ImageView album; } } ``` MainActivity.java ``` public class MainActivity extends AppCompatActivity { private ListView listView; private List<MusicInfo> musicList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.list_view); // 获取手机中的音乐文件 ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); long albumId = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); Bitmap album = getAlbumArt(albumId); MusicInfo music = new MusicInfo(name, artist, album); musicList.add(music); } cursor.close(); } // 设置适配器 MusicListAdapter adapter = new MusicListAdapter(this, musicList); listView.setAdapter(adapter); // 设置点击事件 listView.setOnItemClickListener((parent, view, position, id) -> { MusicInfo music = musicList.get(position); // 启动播放活动 Intent intent = new Intent(MainActivity.this, PlayActivity.class); intent.putExtra("music", music); startActivity(intent); }); } private Bitmap getAlbumArt(long albumId) { Bitmap albumArt = null; try { Uri uri = ContentUris.withAppendedId(Uri.parse("content://media/external/audio/albumart"), albumId); InputStream input = getContentResolver().openInputStream(uri); albumArt = BitmapFactory.decodeStream(input); } catch (FileNotFoundException e) { e.printStackTrace(); } return albumArt; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值