pl #2

Merged
px4lqzo5h merged 6 commits from pl into develop 1 year ago

@ -7,20 +7,28 @@ import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* ExampleInstrumentedTest AndroidJUnit4 Android
* <p>
* useAppContext
* <p>
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
* Android访
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
/**
* useAppContext
*
* @throws Exception
*/
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
// 获取当前测试的应用程序的上下文环境
Context appContext = InstrumentationRegistry.getTargetContext();
// 断言测试的应用程序的包名是否为 "com.example.musicplayer"
// 如果包名不匹配,则测试失败,并抛出异常
assertEquals("com.example.musicplayer", appContext.getPackageName());
}
}
}

@ -17,34 +17,53 @@ import com.example.musicplayer.util.FileUtil;
import java.util.List;
/**
* Created by on 2018/11/27.
* AlbumSongAdapter RecyclerView.Adapter
*/
public class AlbumSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
// 歌曲数据列表
private List<AlbumSong.DataBean.ListBean> mSongsBeanList;
// 上一个被点击的位置
private int mLastPosition = -1;
// 点击事件的监听器
private OnItemClickListener mSongClick;
// 歌曲项的视图类型
private final int songType = 1;
// 底部视图的类型
private final int footerType = 2;
/**
*
* @param songsBeans
*/
public AlbumSongAdapter(List<AlbumSong.DataBean.ListBean> songsBeans) {
mSongsBeanList = songsBeans;
}
/**
*
* @param songClick
*/
public void setSongClick(OnItemClickListener songClick) {
mSongClick = songClick;
}
/**
* ViewHolder
* @param parent
* @param viewType
* @return ViewHolder
*/
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// 根据视图类型创建不同的ViewHolder
if (viewType == songType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_song_search_item, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}else{
} else {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.footer_view_player_height, parent, false);
FooterHolder footerHolder = new FooterHolder(view);
@ -52,12 +71,18 @@ public class AlbumSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
}
}
/**
* ViewHolder
* @param viewHolder ViewHolder
* @param position
*/
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int position) {
// 如果是歌曲类型的ViewHolder
if (viewHolder instanceof ViewHolder) {
ViewHolder holder = (ViewHolder) viewHolder;
AlbumSong.DataBean.ListBean songsBean = mSongsBeanList.get(position);
//设置歌手,因为歌手可能有两个
// 设置歌手名称,可能包含多个歌手
StringBuilder singer = new StringBuilder(songsBean.getSinger().get(0).getName());
for (int i = 1; i < songsBean.getSinger().size(); i++) {
singer.append("、").append(songsBean.getSinger().get(i).getName());
@ -65,8 +90,8 @@ public class AlbumSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
holder.artistTv.setText(singer.toString());
holder.titleTv.setText(songsBean.getSongname());
holder.mItemView.setBackgroundResource(R.color.translucent);
//根据点击显示
if(songsBean.getSongmid().equals(FileUtil.getSong().getSongId())){
// 根据当前播放的歌曲设置不同的显示效果
if(songsBean.getSongmid().equals(FileUtil.getSong().getSongId())){
holder.playLine.setVisibility(View.VISIBLE);
holder.titleTv.setTextColor(App.getContext().getResources().getColor(R.color.yellow));
holder.artistTv.setTextColor(App.getContext().getResources().getColor(R.color.yellow));
@ -76,6 +101,7 @@ public class AlbumSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
holder.titleTv.setTextColor(App.getContext().getResources().getColor(R.color.white));
holder.artistTv.setTextColor(App.getContext().getResources().getColor(R.color.white_blue));
}
// 设置点击事件
holder.mItemView.setOnRippleCompleteListener(rippleView -> {
mSongClick.onClick(position);
equalPosition(position);
@ -83,18 +109,29 @@ public class AlbumSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
}
}
/**
*
* @return
*/
@Override
public int getItemCount() {
return mSongsBeanList.size() + 1;
}
/**
*
* @param position
* @return
*/
@Override
public int getItemViewType(int position) {
return position + 1 == getItemCount() ? footerType : songType;
}
/**
* ViewHolder
*/
class ViewHolder extends RecyclerView.ViewHolder {
TextView titleTv;
TextView artistTv;
RippleView mItemView;
@ -109,13 +146,19 @@ public class AlbumSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
}
}
/**
* FooterHolder
*/
class FooterHolder extends RecyclerView.ViewHolder {
FooterHolder(View itemView) {
super(itemView);
}
}
//判断点击的是否为上一个点击的项目
/**
*
* @param position
*/
private void equalPosition(int position) {
if (position != mLastPosition) {
if (mLastPosition != -1) notifyItemChanged(mLastPosition);
@ -123,4 +166,4 @@ public class AlbumSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
}
notifyItemChanged(position);
}
}
}

@ -17,6 +17,7 @@ import com.example.musicplayer.util.FileUtil;
import java.util.List;
/**
* DownloadSongAdapter RecyclerView.Adapter
* <pre>
* author :
* time : 2019/09/18
@ -25,30 +26,52 @@ import java.util.List;
*/
public class DownloadSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
// 用于日志记录的标签
private static final String TAG = "LoveSongAdapter";
// 底部视图类型
private int footerViewType = 1;
// 歌曲项视图类型
private int itemViewType = 0;
// 已下载歌曲的数据列表
private List<DownloadSong> mDownloadSongList;
// 上下文环境
private Context mContext;
// 上一个被点击的位置
private int mLastPosition = -1;
// 点击事件的监听器
private OnItemClickListener onItemClickListener;
/**
*
* @param onItemClickListener
*/
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
/**
*
* @param context
* @param loveList
*/
public DownloadSongAdapter(Context context, List<DownloadSong> loveList) {
mContext = context;
mDownloadSongList = loveList;
}
/**
* ViewHolder
*/
class ViewHolder extends RecyclerView.ViewHolder {
TextView songNameTv;
TextView singerTv;
View playLine;
RippleView item;
/**
*
* @param itemView
*/
public ViewHolder(View itemView) {
super(itemView);
songNameTv = itemView.findViewById(R.id.tv_title);
@ -59,21 +82,31 @@ public class DownloadSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
}
/**
* holder
* FooterHolder
*/
static class FooterHolder extends RecyclerView.ViewHolder {
TextView numTv;
/**
*
* @param itemView
*/
public FooterHolder(View itemView) {
super(itemView);
numTv = itemView.findViewById(R.id.tv_song_num);
}
}
/**
* ViewHolder
* @param parent
* @param viewType
* @return ViewHolder
*/
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// 根据视图类型创建不同的ViewHolder
if (viewType == itemViewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_song_search_item, parent, false);
@ -87,15 +120,21 @@ public class DownloadSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
}
}
/**
* ViewHolder
* @param viewHolder ViewHolder
* @param position
*/
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
// 如果是歌曲类型的ViewHolder
if (viewHolder instanceof ViewHolder) {
ViewHolder holder = (ViewHolder) viewHolder;
final DownloadSong downloadSong = mDownloadSongList.get(position);
holder.songNameTv.setText(downloadSong.getName());
holder.singerTv.setText(downloadSong.getSinger());
//根据点击显示
// 根据当前播放的歌曲设置不同的显示效果
if (downloadSong.getSongId().equals(FileUtil.getSong().getSongId())) {
holder.playLine.setVisibility(View.VISIBLE);
mLastPosition = position;
@ -117,12 +156,16 @@ public class DownloadSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
equalPosition(position);
});
} else {
// 如果是底部视图的ViewHolder
FooterHolder footerHolder = (FooterHolder) viewHolder;
footerHolder.numTv.setText("共" + mDownloadSongList.size() + "首音乐");
}
}
//判断点击的是否为上一个点击的项目
/**
*
* @param position
*/
public void equalPosition(int position) {
if (position != mLastPosition) {
notifyItemChanged(mLastPosition);
@ -131,13 +174,22 @@ public class DownloadSongAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
notifyItemChanged(position);
}
/**
*
* @return
*/
@Override
public int getItemCount() {
return mDownloadSongList.size() + 1;
}
/**
*
* @param position
* @return
*/
@Override
public int getItemViewType(int position) {
return position + 1 == getItemCount() ? footerViewType : itemViewType;
}
}
}

@ -20,6 +20,7 @@ import com.example.musicplayer.util.MediaUtil;
import java.util.List;
/**
* DownloadingAdapter RecyclerView.Adapter
* <pre>
* author :
* time : 2019/09/17
@ -28,25 +29,40 @@ import java.util.List;
*/
public class DownloadingAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
// 正在下载的歌曲信息列表
private List<DownloadInfo> downloadInfoList;
// 项点击事件监听器
private OnItemClickListener onItemClickListener;
// 删除点击事件监听器
private OnDeleteClickListener onDeleteClickListener;
/**
*
* @param onDeleteClickListener
*/
public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener){
this.onDeleteClickListener = onDeleteClickListener;
}
/**
*
* @param onItemClickListener
*/
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
/**
*
* @param downloadInfoList
*/
public DownloadingAdapter(List<DownloadInfo> downloadInfoList) {
this.downloadInfoList = downloadInfoList;
}
/**
* ViewHolder
*/
class ViewHolder extends RecyclerView.ViewHolder {
TextView songTv;
TextView sizeTv;
@ -54,6 +70,10 @@ public class DownloadingAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
View itemView;
ImageView cancelTv;
/**
*
* @param itemView
*/
public ViewHolder(@NonNull View itemView) {
super(itemView);
this.itemView = itemView;
@ -64,23 +84,34 @@ public class DownloadingAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
}
}
/**
* ViewHolder
* @param viewGroup
* @param viewType
* @return ViewHolder
*/
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.recycler_downing_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
/**
* ViewHolder
* @param viewHolder ViewHolder
* @param position
*/
@SuppressLint({"SetTextI18n", "ClickableViewAccessibility"})
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
ViewHolder holder = (ViewHolder) viewHolder;
if (downloadInfoList.size() == 0) return;
DownloadInfo downloadInfo = downloadInfoList.get(i);
DownloadInfo downloadInfo = downloadInfoList.get(position);
holder.songTv.setText(downloadInfo.getSongName());
// 根据下载状态设置不同的显示内容
if(downloadInfo.getStatus() == Constant.DOWNLOAD_READY){//准备开始下载
holder.sizeTv.setText("正在获取歌曲大小");
holder.seekBar.setVisibility(View.GONE);
@ -99,18 +130,20 @@ public class DownloadingAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
}
holder.seekBar.setOnTouchListener((view, motionEvent) -> true); //消费该事件让seekBar不能拖动和点击
holder.seekBar.setProgress(downloadInfo.getProgress());
//点击事件
// 设置点击事件
holder.itemView.setOnClickListener(view -> {
onItemClickListener.onClick(i);
onItemClickListener.onClick(position);
});
//取消
holder.cancelTv.setOnClickListener(view -> onDeleteClickListener.onClick(i));
// 设置取消按钮点击事件
holder.cancelTv.setOnClickListener(view -> onDeleteClickListener.onClick(position));
}
/**
*
* @return
*/
@Override
public int getItemCount() {
return downloadInfoList.size();
}
}
}

@ -17,64 +17,80 @@ import com.example.musicplayer.util.CommonUtil;
import java.util.List;
/**
*
*
* Created by on 2018/9/23.
*/
public class ExpandableListViewAdapter extends BaseExpandableListAdapter {
private static final String TAG = "ExpandableListViewAdapter";
private String[] mGroupStrings; //一级标题
private List<List<AlbumCollection>> mAlbumCollectionList; //二级收藏歌单列表
private Context mContext;
private OnChildItemClickListener mChildClickListener; //二级item的点击监听
private String[] mGroupStrings; // 一级标题数组
private List<List<AlbumCollection>> mAlbumCollectionList; // 二级歌单列表
private Context mContext; // 上下文环境
private OnChildItemClickListener mChildClickListener; // 二级项的点击监听器
/**
*
* @param context
* @param groupStrings
* @param albumCollectionList
*/
public ExpandableListViewAdapter(Context context, String[] groupStrings, List<List<AlbumCollection>> albumCollectionList) {
mAlbumCollectionList = albumCollectionList;
mGroupStrings = groupStrings;
mContext = context;
}
//提供给外部使用
public void setOnChildItemClickListener(OnChildItemClickListener onChildItemClickListener){
mChildClickListener=onChildItemClickListener;
/**
*
* @param onChildItemClickListener
*/
public void setOnChildItemClickListener(OnChildItemClickListener onChildItemClickListener){
mChildClickListener = onChildItemClickListener;
}
// 获取一级列表的组数
@Override
public int getGroupCount() {
return mGroupStrings.length;
}
// 获取指定组的子项数
@Override
public int getChildrenCount(int groupPosition) {
return mAlbumCollectionList.get(groupPosition).size();
}
// 获取指定组的对象
@Override
public Object getGroup(int groupPosition) {
return mGroupStrings[groupPosition];
}
// 获取指定子项的对象
@Override
public Object getChild(int groupPosition, int childPosition) {
return mAlbumCollectionList.get(groupPosition).get(childPosition);
}
// 获取指定组的ID
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
// 获取指定子项的ID
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
// 是否有稳定的ID
@Override
public boolean hasStableIds() {
return true;
}
//绘制一级列表
// 绘制一级列表
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View view;
@ -90,7 +106,7 @@ public class ExpandableListViewAdapter extends BaseExpandableListAdapter {
groupViewHolder = (GroupViewHolder) view.getTag();
}
groupViewHolder.groupTextView.setText(mGroupStrings[groupPosition]);
//根据展开状态改变箭头方向
// 根据展开状态改变箭头方向
if (isExpanded) {
groupViewHolder.pointIv.setImageResource(R.drawable.up);
} else {
@ -99,8 +115,7 @@ public class ExpandableListViewAdapter extends BaseExpandableListAdapter {
return view;
}
//绘制二级列表
// 绘制二级列表项
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
View view;
@ -122,26 +137,28 @@ public class ExpandableListViewAdapter extends BaseExpandableListAdapter {
childViewHolder.authorTv.setText(mAlbumCollectionList.get(groupPosition).get(childPosition).getSingerName());
CommonUtil.setImgWithGlide(mContext,
mAlbumCollectionList.get(groupPosition).get(childPosition).getAlbumPic(), childViewHolder.faceIv);
//点击水波纹效果,结束后开始点击效果
childViewHolder.childView.setOnRippleCompleteListener(rippleView -> mChildClickListener.onClick(groupPosition,childPosition));
// 点击水波纹效果,结束后开始点击效果
childViewHolder.childView.setOnRippleCompleteListener(rippleView -> mChildClickListener.onClick(groupPosition, childPosition));
return view;
}
// 是否可以选择子项
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
// 一级列表项的ViewHolder
class GroupViewHolder {
private TextView groupTextView;
private ImageView pointIv;
}
// 二级列表项的ViewHolder
class ChildViewHolder {
TextView albumNameTv;
ImageView faceIv;
TextView authorTv;
RippleView childView;
}
}
}
Loading…
Cancel
Save