Android实现播放音乐列表
2018-01-21 13:35
369 查看
首先我们看下QQ音乐,酷我音乐的列表图
网易云音乐也是这种列表,下面展示下网易云音乐的音乐列表gif图
总结下播放列表播放音乐的逻辑:
1 点击某一首歌,就开始播放
2 当其他歌曲在播放的时候,点击新的一首歌,原先播放的暂停,新的歌曲播放
3 当前有一首歌在播放,即使列表滑出了屏幕当再次回到屏幕的时候还是显示这首歌在播放
下面开始撸代码:
最后看下效果图:
网易云音乐也是这种列表,下面展示下网易云音乐的音乐列表gif图
总结下播放列表播放音乐的逻辑:
1 点击某一首歌,就开始播放
2 当其他歌曲在播放的时候,点击新的一首歌,原先播放的暂停,新的歌曲播放
3 当前有一首歌在播放,即使列表滑出了屏幕当再次回到屏幕的时候还是显示这首歌在播放
下面开始撸代码:
package com.smartrefesh.listplayer; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.smartrefesh.R; import com.smartrefesh.model.MusicModel; import java.util.List; /** * Description 音乐播放列表的Adapter * Created by Administrator * Time 2018/1/21 15:13 */ public class ListPlayerAdapter extends RecyclerView.Adapter<ListPlayerAdapter.MusicItemHolder> { private Context context; private List<MusicModel> list; public ListPlayerAdapter(Context context, List<MusicModel> list) { this.context = context; this.list = list; } @Override public MusicItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new MusicItemHolder(LayoutInflater.from(context).inflate(R.layout.item_text, parent, false)); } @Override public void onBindViewHolder(MusicItemHolder holder, int position, List<Object> payloads) { if(payloads==null||payloads.size()==0){ onBindViewHolder(holder, position); }else { holder.musicName.setTextColor(context.getResources().getColor(R.color.black)); } } @Override public void onBindViewHolder(final MusicItemHolder holder, final int position) { final MusicModel musicModel = list.get(position); holder.musicName.setText(musicModel.getMusicName()); int playPosition = MusicPlayer.getInstance().getLastPosition();//获取历史播放位置 if(playPosition==position&&MusicPlayer.getInstance().isPlaying()){ holder.musicName.setTextColor(context.getResources().getColor(R.color.colorPrimary)); }else { holder.musicName.setTextColor(context.getResources().getColor(R.color.black)); } holder.musicName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int playPosition = MusicPlayer.getInstance().getLastPosition();//点击切换更换了历史播放位置所以需要重新获取 if(playPosition==position){ if(MusicPlayer.getInstance().isPlaying()){ MusicPlayer.getInstance().pause(position); holder.musicName.setTextColor(context.getResources().getColor(R.color.black)); }else { MusicPlayer.getInstance().playUrl(musicModel.getUrl(),position); holder.musicName.setTextColor(context.getResources().getColor(R.color.colorPrimary)); } }else { notifyItemChanged(playPosition,"1"); MusicPlayer.getInstance().playUrl(musicModel.getUrl(),position); holder.musicName.setTextColor(context.getResources().getColor(R.color.colorPrimary)); } } }); } @Override public int getItemCount() { return list==null?0:list.size(); } static class MusicItemHolder extends RecyclerView.ViewHolder{ private TextView musicName; public MusicItemHolder(View itemView) { super(itemView); musicName = itemView.findViewById(R.id.music_name); } } }
public interface IPlayer { void playUrl(String url, int currentPosition); void pause(int currentPosition); boolean isPlaying(); int getLastPosition(); }
最后看下效果图:
相关文章推荐
- Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)
- Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)
- Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)
- Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果
- Android中通过耳机按键控制音乐播放的实现
- Android VLC播放器二次开发3——音乐播放(歌曲列表+歌词同步滚动)
- 【手机变身无线音箱-WIFI流媒体传输】--音乐在PC和手机间双向播放-详解Android DLNA使用-使用DLNA实现不同设备间媒体共享
- android实现开机自动播放音乐实例(Broadcast、Service)
- Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果(二)
- 深入剖析Android四大组件(六)——相对完美的后台Service实现播放音乐功能
- Android 音乐播放器的开发教程(六)service的运用及音乐列表点击播放 ----- 小达
- android如何长时间音乐播放实现MediaPlayer
- Android之MediaPlayer播放音乐并实现进度条实例
- Android MediaPlayer播放音乐并实现进度条
- android 利用 service 实现音乐播放
- android播放音乐的三种方法实现
- Android中通过耳机按键控制音乐播放的实现
- 【Android开发学习04】长时间的音乐播放实现MediaPlayer
- Android小功能实现-sim卡读取,发短信,播放音乐
- Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果