增加自建列表和收藏列表的显示功能

pull/1/head
jsyjst 7 years ago
parent 15583cdd65
commit 00f4c565e2

@ -2,7 +2,7 @@
<litepal> <litepal>
<dbname value="SongList"></dbname> <dbname value="SongList"></dbname>
<version value="11"></version> <version value="12"></version>
<list> <list>
<mapping class="com.example.musicplayer.entiy.OnlineSong"></mapping> <mapping class="com.example.musicplayer.entiy.OnlineSong"></mapping>
@ -10,5 +10,6 @@
<mapping class="com.example.musicplayer.entiy.SearchHistory"></mapping> <mapping class="com.example.musicplayer.entiy.SearchHistory"></mapping>
<mapping class="com.example.musicplayer.entiy.Love"></mapping> <mapping class="com.example.musicplayer.entiy.Love"></mapping>
<mapping class="com.example.musicplayer.entiy.HistorySong"></mapping> <mapping class="com.example.musicplayer.entiy.HistorySong"></mapping>
<mapping class="com.example.musicplayer.entiy.AlbumCollection"></mapping>
</list> </list>
</litepal> </litepal>

@ -8,20 +8,33 @@ import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.andexert.library.RippleView;
import com.example.musicplayer.R; import com.example.musicplayer.R;
import com.example.musicplayer.entiy.AlbumCollection;
import com.example.musicplayer.util.CommonUtil;
import java.util.List;
/** /**
* Created by on 2018/9/23. * Created by on 2018/9/23.
*/ */
public class ExpandableListViewAdapter extends BaseExpandableListAdapter { public class ExpandableListViewAdapter extends BaseExpandableListAdapter {
private String [] mGroupStrings; private static final String TAG = "ExpandableListViewAdapter";
private String [][] mChildStrings;
private String[] mGroupStrings;
private List<List<AlbumCollection>> mAlbumCollectionList;
private Context mContext; private Context mContext;
public ExpandableListViewAdapter(Context context, String [] groupStrings, String [][] childStrings){ private OnChildItemClickListener mChildClickListener;
mChildStrings=childStrings;
mGroupStrings=groupStrings;
mContext=context; public ExpandableListViewAdapter(Context context, String[] groupStrings, List<List<AlbumCollection>> albumCollectionList) {
mAlbumCollectionList = albumCollectionList;
mGroupStrings = groupStrings;
mContext = context;
}
public void setOnChildItemClickListener(OnChildItemClickListener onChildItemClickListener){
mChildClickListener=onChildItemClickListener;
} }
@Override @Override
@ -31,7 +44,7 @@ public class ExpandableListViewAdapter extends BaseExpandableListAdapter {
@Override @Override
public int getChildrenCount(int groupPosition) { public int getChildrenCount(int groupPosition) {
return mChildStrings[groupPosition].length; return mAlbumCollectionList.get(groupPosition).size();
} }
@Override @Override
@ -41,7 +54,7 @@ public class ExpandableListViewAdapter extends BaseExpandableListAdapter {
@Override @Override
public Object getChild(int groupPosition, int childPosition) { public Object getChild(int groupPosition, int childPosition) {
return mChildStrings[groupPosition][childPosition]; return mAlbumCollectionList.get(groupPosition).get(childPosition);
} }
@Override @Override
@ -56,54 +69,84 @@ public class ExpandableListViewAdapter extends BaseExpandableListAdapter {
@Override @Override
public boolean hasStableIds() { public boolean hasStableIds() {
return false; return true;
} }
@Override @Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View view; View view;
GroupViewHolder groupViewHolder; final GroupViewHolder groupViewHolder;
if(convertView==null){ if (convertView == null) {
view= LayoutInflater.from(mContext).inflate(R.layout.item_first,parent,false); view = LayoutInflater.from(mContext).inflate(R.layout.item_first, parent, false);
groupViewHolder=new GroupViewHolder(); groupViewHolder = new GroupViewHolder();
groupViewHolder.groupTextView=view.findViewById(R.id.tv_new_song); groupViewHolder.groupTextView = view.findViewById(R.id.tv_new_song);
groupViewHolder.pointIv = view.findViewById(R.id.iv_point);
groupViewHolder.addIv = view.findViewById(R.id.iv_add);
view.setTag(groupViewHolder); view.setTag(groupViewHolder);
}else{ } else {
view=convertView; view = convertView;
groupViewHolder=(GroupViewHolder)view.getTag(); groupViewHolder = (GroupViewHolder) view.getTag();
} }
groupViewHolder.groupTextView.setText(mGroupStrings[groupPosition]); groupViewHolder.groupTextView.setText(mGroupStrings[groupPosition]);
if (isExpanded) {
groupViewHolder.pointIv.setImageResource(R.drawable.up);
} else {
groupViewHolder.pointIv.setImageResource(R.drawable.down);
}
return view; return view;
} }
@Override @Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
View view; View view;
ChildViewHolder childViewHolder; final ChildViewHolder childViewHolder;
if(convertView==null){ if (convertView == null) {
view= LayoutInflater.from(mContext).inflate(R.layout.item_second,parent,false); childViewHolder = new ChildViewHolder();
childViewHolder=new ChildViewHolder(); view = LayoutInflater.from(mContext).inflate(R.layout.item_second, parent, false);
childViewHolder.childTextView=view.findViewById(R.id.tv_song_list_name); childViewHolder.albumNameTv = view.findViewById(R.id.tv_album_name);
childViewHolder.faceIv = view.findViewById(R.id.iv_album);
childViewHolder.authorTv = view.findViewById(R.id.tv_author);
childViewHolder.childView = view.findViewById(R.id.ripple);
view.setTag(childViewHolder); view.setTag(childViewHolder);
}else{ } else {
view=convertView; view = convertView;
childViewHolder=(ChildViewHolder) view.getTag(); childViewHolder = (ChildViewHolder) view.getTag();
} }
childViewHolder.childTextView.setText(mChildStrings[groupPosition][childPosition]); view.setBackgroundResource(R.color.translucent);
childViewHolder.albumNameTv.setText(mAlbumCollectionList.get(groupPosition).get(childPosition).getAlbumName());
childViewHolder.authorTv.setText(mAlbumCollectionList.get(groupPosition).get(childPosition).getSingerName());
CommonUtil.setImgWithGlide(mContext,
mAlbumCollectionList.get(groupPosition).get(childPosition).getAlbumPic(), childViewHolder.faceIv);
childViewHolder.childView.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() {
@Override
public void onComplete(RippleView rippleView) {
mChildClickListener.onClick(groupPosition,childPosition);
}
});
return view; return view;
} }
@Override @Override
public boolean isChildSelectable(int groupPosition, int childPosition) { public boolean isChildSelectable(int groupPosition, int childPosition) {
return false; return true;
} }
class GroupViewHolder{
class GroupViewHolder {
private TextView groupTextView; private TextView groupTextView;
private ImageView pointIv; private ImageView pointIv;
private ImageView addIv; private ImageView addIv;
} }
class ChildViewHolder{
private TextView childTextView; class ChildViewHolder {
private ImageView faceIv; TextView albumNameTv;
ImageView faceIv;
TextView authorTv;
RippleView childView;
}
public interface OnChildItemClickListener{
void onClick(int groupPosition,int childPosition);
} }
} }

@ -16,5 +16,6 @@ public class BroadcastName {
public static final String LOVE_SONG_CHANGE="love_song_change"; public static final String LOVE_SONG_CHANGE="love_song_change";
public static final String LOVE_SONG_CANCEL="love_song_cancel"; public static final String LOVE_SONG_CANCEL="love_song_cancel";
public static final String HISTORY_SONG_CHANGE="history_song_change"; public static final String HISTORY_SONG_CHANGE="history_song_change";
public static final String COLLECTION_ALBUM_CHANGE="collection_album_change";
} }

@ -0,0 +1,73 @@
package com.example.musicplayer.entiy;
import org.litepal.crud.LitePalSupport;
/**
* Created by on 2018/12/4.
*/
public class AlbumCollection extends LitePalSupport {
private long id;
private String albumId;
private String albumName;
private String singerName;
private String albumPic;
private String publicTime;
private String SongNum;
public void setId(long id) {
this.id = id;
}
public long getId() {
return id;
}
public void setAlbumId(String albumId) {
this.albumId = albumId;
}
public String getAlbumId() {
return albumId;
}
public String getAlbumName() {
return albumName;
}
public String getAlbumPic() {
return albumPic;
}
public String getPublicTime() {
return publicTime;
}
public String getSingerName() {
return singerName;
}
public String getSongNum() {
return SongNum;
}
public void setAlbumName(String albumName) {
this.albumName = albumName;
}
public void setAlbumPic(String albumPic) {
this.albumPic = albumPic;
}
public void setPublicTime(String publicTime) {
this.publicTime = publicTime;
}
public void setSingerName(String singerName) {
this.singerName = singerName;
}
public void setSongNum(String songNum) {
SongNum = songNum;
}
}

@ -449,7 +449,7 @@ public class PlayerService extends Service {
public void onFinish(boolean success) { public void onFinish(boolean success) {
if (success) { if (success) {
if(LitePal.findAll(HistorySong.class).size()>Constant.HISTORY_MAX_SIZE){ if(LitePal.findAll(HistorySong.class).size()>Constant.HISTORY_MAX_SIZE){
LitePal.delete(HistorySong.class,LitePal.findAll(HistorySong.class).get(0).getId()); LitePal.delete(HistorySong.class,LitePal.findFirst(HistorySong.class).getId());
} }
} }
} }

@ -14,6 +14,7 @@ import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@ -168,5 +169,12 @@ public class CommonUtil {
.into(target); .into(target);
return null; return null;
} }
public static void setImgWithGlide(Context context,String imgUrl,ImageView view){
Glide.with(context)
.load(imgUrl)
.apply(RequestOptions.placeholderOf(R.drawable.welcome))
.apply(RequestOptions.errorOf(R.drawable.love))
.into(view);
}
} }

@ -1,5 +1,8 @@
package com.example.musicplayer.view; package com.example.musicplayer.view;
import android.animation.AnimatorInflater;
import android.animation.AnimatorSet;
import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
@ -13,9 +16,12 @@ import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
@ -26,9 +32,16 @@ import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.transition.Transition;
import com.example.musicplayer.R; import com.example.musicplayer.R;
import com.example.musicplayer.constant.BroadcastName;
import com.example.musicplayer.entiy.Album;
import com.example.musicplayer.entiy.AlbumCollection;
import com.example.musicplayer.util.CommonUtil; import com.example.musicplayer.util.CommonUtil;
import com.github.florent37.materialviewpager.MaterialViewPager; import com.github.florent37.materialviewpager.MaterialViewPager;
import org.litepal.LitePal;
import org.litepal.crud.callback.SaveCallback;
import org.litepal.crud.callback.UpdateOrDeleteCallback;
import javax.microedition.khronos.opengles.GL; import javax.microedition.khronos.opengles.GL;
/** /**
@ -36,15 +49,15 @@ import javax.microedition.khronos.opengles.GL;
*/ */
public class AlbumContentFragment extends Fragment { public class AlbumContentFragment extends Fragment {
private static final String TAG="AlbumContentFragment"; private static final String TAG = "AlbumContentFragment";
public static final String ALBUM_ID_KEY="id"; public static final String ALBUM_ID_KEY = "id";
private static final String ALBUM_NAME_KEY="albumName"; private static final String ALBUM_NAME_KEY = "albumName";
private static final String SINGER_NAME_KEY="singerName"; private static final String SINGER_NAME_KEY = "singerName";
private static final String ALBUM_PIC_KEY="albumPic"; private static final String ALBUM_PIC_KEY = "albumPic";
public static final String PUBLIC_TIEM_KEY="publicTime"; public static final String PUBLIC_TIEM_KEY = "publicTime";
private String mAlbumName,mSingerNmae,mAlbumPic,mPublicTime,mId; private String mAlbumName, mSingerNmae, mAlbumPic, mPublicTime, mId;
private MaterialViewPager mViewPager; private MaterialViewPager mViewPager;
private Toolbar toolbar; private Toolbar toolbar;
@ -52,6 +65,14 @@ public class AlbumContentFragment extends Fragment {
private TextView mSingerNameTv; private TextView mSingerNameTv;
private TextView mPublicTimeTv; private TextView mPublicTimeTv;
private ImageView mAlbumPicIv; private ImageView mAlbumPicIv;
private MenuItem mLoveBtn;
private boolean mLove;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);//加上这句话menu才会显示出来
}
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
@ -66,12 +87,21 @@ public class AlbumContentFragment extends Fragment {
mPublicTimeTv = mViewPager.getHeaderBackgroundContainer().findViewById(R.id.tv_public_time); mPublicTimeTv = mViewPager.getHeaderBackgroundContainer().findViewById(R.id.tv_public_time);
return view; return view;
} }
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
initView(); initView();
} }
private void initView(){ @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.love, menu);
mLoveBtn = menu.findItem(R.id.btn_love);
showLove();
super.onCreateOptionsMenu(menu, inflater);
}
private void initView() {
toolbar.setTitle(mAlbumName); toolbar.setTitle(mAlbumName);
SimpleTarget target = new SimpleTarget<Drawable>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) { SimpleTarget target = new SimpleTarget<Drawable>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) {
@ -88,16 +118,13 @@ public class AlbumContentFragment extends Fragment {
.apply(RequestOptions.errorOf(R.drawable.welcome)) .apply(RequestOptions.errorOf(R.drawable.welcome))
.into(target); .into(target);
mSingerNameTv.setText("歌手 " + mSingerNmae);
mPublicTimeTv.setText("发行时间 " + mPublicTime);
mSingerNameTv.setText("歌手 "+mSingerNmae);
mPublicTimeTv.setText("发行时间 "+mPublicTime);
toolbar.setTitleTextColor(getActivity().getResources().getColor(R.color.white)); toolbar.setTitleTextColor(getActivity().getResources().getColor(R.color.white));
if (toolbar != null) { if (toolbar != null) {
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar); ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
final ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar(); final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if (actionBar != null) { if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true); actionBar.setDisplayShowHomeEnabled(true);
@ -113,16 +140,15 @@ public class AlbumContentFragment extends Fragment {
getActivity().getSupportFragmentManager().popBackStack(); getActivity().getSupportFragmentManager().popBackStack();
} }
}); });
mViewPager.getViewPager().setAdapter(new FragmentStatePagerAdapter(getActivity().getSupportFragmentManager()) { mViewPager.getViewPager().setAdapter(new FragmentStatePagerAdapter(getActivity().getSupportFragmentManager()) {
@Override @Override
public Fragment getItem(int position) { public Fragment getItem(int position) {
switch (position) { switch (position) {
case 0: case 0:
return AlbumSongFragment.newInstance(AlbumSongFragment.ALBUM_SONG,mId,mPublicTime); return AlbumSongFragment.newInstance(AlbumSongFragment.ALBUM_SONG, mId, mPublicTime);
case 1: case 1:
return AlbumSongFragment.newInstance(AlbumSongFragment.ALBUM_INFORATION,mId,mPublicTime); return AlbumSongFragment.newInstance(AlbumSongFragment.ALBUM_INFORATION, mId, mPublicTime);
default: default:
return null; return null;
} }
@ -153,22 +179,70 @@ public class AlbumContentFragment extends Fragment {
} }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.btn_love:
if (mLove) {
LitePal.deleteAllAsync(AlbumCollection.class, "albumId=?", mId).listen(new UpdateOrDeleteCallback() {
@Override
public void onFinish(int rowsAffected) {
mLoveBtn.setIcon(R.drawable.favorites);
CommonUtil.showToast(getActivity(), "你已取消收藏该专辑");
}
});
} else {
AlbumCollection albumCollection = new AlbumCollection();
albumCollection.setAlbumId(mId);
albumCollection.setAlbumName(mAlbumName);
albumCollection.setAlbumPic(mAlbumPic);
albumCollection.setPublicTime(mPublicTime);
albumCollection.setSingerName(mSingerNmae);
albumCollection.saveAsync().listen(new SaveCallback() {
@Override
public void onFinish(boolean success) {
mLoveBtn.setIcon(R.drawable.favorites_selected);
CommonUtil.showToast(getActivity(), "收藏专辑成功");
}
});
}
mLove = !mLove;
//发送收藏改变的广播通知收藏列表
getActivity().sendBroadcast(new Intent(BroadcastName.COLLECTION_ALBUM_CHANGE));
break;
}
return super.onOptionsItemSelected(item);
}
public static Fragment newInstance(String id,String albumName,String albumPic,String singerName,String publicTime){ private void showLove() {
if (LitePal.where("albumId=?", mId).find(AlbumCollection.class).size() != 0) {
mLove = true;
mLoveBtn.setIcon(R.drawable.favorites_selected);
} else {
mLove = false;
mLoveBtn.setIcon(R.drawable.favorites);
}
}
public static Fragment newInstance(String id, String albumName, String albumPic, String
singerName, String publicTime) {
AlbumContentFragment albumContentFragment = new AlbumContentFragment(); AlbumContentFragment albumContentFragment = new AlbumContentFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(ALBUM_ID_KEY,id); bundle.putString(ALBUM_ID_KEY, id);
bundle.putString(ALBUM_NAME_KEY,albumName); bundle.putString(ALBUM_NAME_KEY, albumName);
bundle.putString(ALBUM_PIC_KEY,albumPic); bundle.putString(ALBUM_PIC_KEY, albumPic);
bundle.putString(SINGER_NAME_KEY,singerName); bundle.putString(SINGER_NAME_KEY, singerName);
bundle.putString(PUBLIC_TIEM_KEY,publicTime); bundle.putString(PUBLIC_TIEM_KEY, publicTime);
albumContentFragment.setArguments(bundle); albumContentFragment.setArguments(bundle);
return albumContentFragment; return albumContentFragment;
} }
private void getBundle(){
Bundle bundle =getArguments(); private void getBundle() {
if(bundle !=null){ Bundle bundle = getArguments();
mId =bundle.getString(ALBUM_ID_KEY); if (bundle != null) {
mId = bundle.getString(ALBUM_ID_KEY);
mAlbumName = bundle.getString(ALBUM_NAME_KEY); mAlbumName = bundle.getString(ALBUM_NAME_KEY);
mAlbumPic = bundle.getString(ALBUM_PIC_KEY); mAlbumPic = bundle.getString(ALBUM_PIC_KEY);
mSingerNmae = bundle.getString(SINGER_NAME_KEY); mSingerNmae = bundle.getString(SINGER_NAME_KEY);

@ -132,7 +132,6 @@ public class AlbumSongFragment extends Fragment implements IAlbumSongContract.Vi
@Override @Override
public void onDestroy(){ public void onDestroy(){
super.onDestroy(); super.onDestroy();
getActivity().unbindService(connection);
getActivity().unregisterReceiver(albumSongChangeReceiver); getActivity().unregisterReceiver(albumSongChangeReceiver);
} }

@ -259,7 +259,7 @@ public class MainActivity extends AppCompatActivity {
public void onDestroy() { public void onDestroy() {
unbindService(connection); unbindService(connection);
unregisterReceiver(songChangeReceiver); unregisterReceiver(songChangeReceiver);
mSeekBarThread.interrupt(); if(mSeekBarThread!=null) mSeekBarThread.interrupt();
Song song = FileHelper.getSong(); Song song = FileHelper.getSong();
song.setCurrentTime(mPlayStatusBinder.getCurrentTime()); song.setCurrentTime(mPlayStatusBinder.getCurrentTime());
Log.d(TAG, "onServiceDisconnected: " + song.getCurrentTime()); Log.d(TAG, "onServiceDisconnected: " + song.getCurrentTime());

@ -15,6 +15,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.ExpandableListAdapter; import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
@ -22,6 +23,8 @@ import com.example.musicplayer.R;
import com.example.musicplayer.adapter.ExpandableListViewAdapter; import com.example.musicplayer.adapter.ExpandableListViewAdapter;
import com.example.musicplayer.adapter.HistoryAdapter; import com.example.musicplayer.adapter.HistoryAdapter;
import com.example.musicplayer.constant.BroadcastName; import com.example.musicplayer.constant.BroadcastName;
import com.example.musicplayer.entiy.Album;
import com.example.musicplayer.entiy.AlbumCollection;
import com.example.musicplayer.entiy.HistorySong; import com.example.musicplayer.entiy.HistorySong;
import com.example.musicplayer.entiy.LocalSong; import com.example.musicplayer.entiy.LocalSong;
import com.example.musicplayer.entiy.Love; import com.example.musicplayer.entiy.Love;
@ -30,6 +33,9 @@ import com.example.musicplayer.widget.MyListView;
import org.litepal.LitePal; import org.litepal.LitePal;
import java.util.ArrayList;
import java.util.List;
/** /**
* A simple {@link Fragment} subclass. * A simple {@link Fragment} subclass.
*/ */
@ -38,16 +44,20 @@ public class MainFragment extends Fragment {
private LinearLayout mFunctionLinear; private LinearLayout mFunctionLinear;
private MyListView myListView; private MyListView myListView;
private ExpandableListAdapter mAdapter; private ExpandableListViewAdapter mAdapter;
private LinearLayout mLocalMusicLinear,mCollectionLinear,mHistoryMusicLinear; private LinearLayout mLocalMusicLinear, mCollectionLinear, mHistoryMusicLinear;
private Button playerBtn; private Button playerBtn;
private TextView mLocalMusicNum,mLoveMusicNum,mHistoryMusicNum; private TextView mLocalMusicNum, mLoveMusicNum, mHistoryMusicNum;
private TextView mSeekBtn; private TextView mSeekBtn;
private List<List<AlbumCollection>> mAlbumCollectionList;
private List<AlbumCollection> mLoveAlbumList;
private boolean oneExpand;
private boolean twoExpand;
private String[] mGroupStrings = {"自建歌单", "收藏歌单"}; private String[] mGroupStrings = {"自建歌单", "收藏歌单"};
private String[][] mSongStrings = { private String[][] mSongStrings = {
{"我喜欢", "默认收藏", "哎呀不错哦", "残渊"}, {"我喜欢"},
{"啦啦", "哈哈"} {"Jay", "魔杰座"}
}; };
//注册广播 //注册广播
private IntentFilter intentFilter; private IntentFilter intentFilter;
@ -76,22 +86,34 @@ public class MainFragment extends Fragment {
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
mAdapter = new ExpandableListViewAdapter(getActivity(), mGroupStrings, mSongStrings);
mLoveAlbumList = new ArrayList<>();
mAlbumCollectionList = new ArrayList<>();
AlbumCollection albumCollection = new AlbumCollection();
albumCollection.setAlbumName("我喜欢");
albumCollection.setSingerName("袁健策");
mLoveAlbumList.add(albumCollection);
mAlbumCollectionList.add(mLoveAlbumList);
mAlbumCollectionList.add(orderCollection(LitePal.findAll(AlbumCollection.class)));
mAdapter = new ExpandableListViewAdapter(getActivity(), mGroupStrings, mAlbumCollectionList);
myListView.setAdapter(mAdapter); myListView.setAdapter(mAdapter);
//注册广播 //注册广播
intentFilter = new IntentFilter(); intentFilter = new IntentFilter();
intentFilter.addAction(BroadcastName.SONG_CHANGE); intentFilter.addAction(BroadcastName.SONG_CHANGE);
intentFilter.addAction(BroadcastName.COLLECTION_ALBUM_CHANGE);
songChangeReceiver = new SongChangeReceiver(); songChangeReceiver = new SongChangeReceiver();
getActivity().registerReceiver(songChangeReceiver, intentFilter); getActivity().registerReceiver(songChangeReceiver, intentFilter);
onClick(); onClick();
} }
@Override @Override
public void onDestroy(){ public void onDestroy() {
super.onDestroy(); super.onDestroy();
getActivity().unregisterReceiver(songChangeReceiver); getActivity().unregisterReceiver(songChangeReceiver);
} }
@Override @Override
public void onResume(){ public void onResume() {
super.onResume(); super.onResume();
showMusicNum(); showMusicNum();
Log.d(TAG, "onResume: true"); Log.d(TAG, "onResume: true");
@ -125,6 +147,50 @@ public class MainFragment extends Fragment {
replaceFragment(new HistoryFragment()); replaceFragment(new HistoryFragment());
} }
}); });
myListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
if (groupPosition == 0) {
oneExpand = true;
} else if (groupPosition == 1) {
twoExpand = true;
}
}
});
myListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
if (groupPosition == 0) {
oneExpand = false;
} else if (groupPosition == 1) {
twoExpand = false;
}
}
});
myListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
return false;
}
});
mAdapter.setOnChildItemClickListener(new ExpandableListViewAdapter.OnChildItemClickListener() {
@Override
public void onClick(int groupPosition, int childPosition) {
if (groupPosition == 0 && childPosition == 0) {
replaceFragment(new CollectionFragment());
} else if (groupPosition == 1) {
AlbumCollection albumCollection = mAlbumCollectionList.get(groupPosition).get(childPosition);
replaceFragment(AlbumContentFragment.newInstance(
albumCollection.getAlbumId(),
albumCollection.getAlbumName(),
albumCollection.getAlbumPic(),
albumCollection.getSingerName(),
albumCollection.getPublicTime()
));
}
}
});
} }
@ -140,16 +206,41 @@ public class MainFragment extends Fragment {
transaction.addToBackStack(null); transaction.addToBackStack(null);
transaction.commit(); transaction.commit();
} }
private void showMusicNum(){
mLoveMusicNum.setText(""+LitePal.findAll(LocalSong.class).size());
mLoveMusicNum.setText(""+LitePal.findAll(Love.class).size());
mHistoryMusicNum.setText(""+LitePal.findAll(HistorySong.class).size());
private void showMusicNum() {
mLoveMusicNum.setText("" + LitePal.findAll(LocalSong.class).size());
mLoveMusicNum.setText("" + LitePal.findAll(Love.class).size());
mHistoryMusicNum.setText("" + LitePal.findAll(HistorySong.class).size());
}
private List<AlbumCollection> orderCollection(List<AlbumCollection> tempList) {
List<AlbumCollection> mAlbumCollectionList = new ArrayList<>();
for (int i = tempList.size() - 1; i >= 0; i--) {
mAlbumCollectionList.add(tempList.get(i));
}
return mAlbumCollectionList;
} }
private class SongChangeReceiver extends BroadcastReceiver { private class SongChangeReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
mHistoryMusicNum.setText(""+LitePal.findAll(HistorySong.class).size()); String action = intent.getAction();
if (action.equals(BroadcastName.SONG_CHANGE)) {
mHistoryMusicNum.setText("" + LitePal.findAll(HistorySong.class).size());
} else if (action.equals(BroadcastName.COLLECTION_ALBUM_CHANGE)) {
mAlbumCollectionList.clear();
mAlbumCollectionList.add(mLoveAlbumList);
mAlbumCollectionList.add(orderCollection(LitePal.findAll(AlbumCollection.class)));
if (twoExpand) {
myListView.collapseGroup(1);
myListView.expandGroup(1);
} else {
myListView.expandGroup(1);
myListView.collapseGroup(1);
}
}
} }
} }

@ -365,7 +365,7 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
mLoveBtn.setSelected(true); mLoveBtn.setSelected(true);
mPresenter.saveToLove(FileHelper.getSong()); mPresenter.saveToLove(FileHelper.getSong());
} }
isLove = !isLove;
} }
}); });
} }
@ -443,7 +443,6 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
@Override @Override
public void showLoveAnim() { public void showLoveAnim() {
mLoveBtn.setSelected(true);
AnimatorSet animatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(PlayActivity.this, R.animator.favorites_anim); AnimatorSet animatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(PlayActivity.this, R.animator.favorites_anim);
animatorSet.setTarget(mLoveBtn); animatorSet.setTarget(mLoveBtn);
animatorSet.start(); animatorSet.start();

@ -1,49 +0,0 @@
package com.example.musicplayer.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ScrollView;
/**
* Created by on 2018/9/25.
*/
public class MyScrollView extends ScrollView {
private int mLastYIntercept=0;
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
super.onInterceptTouchEvent(event);
boolean intercepted = false;
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
intercepted = false;
break;
case MotionEvent.ACTION_MOVE:
intercepted=true;
break;
case MotionEvent.ACTION_UP:
intercepted = false;
break;
}
Log.d("jsyjst", "----------------"+intercepted);
mLastYIntercept=y;
return intercepted;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

@ -173,7 +173,7 @@
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_marginEnd="20dp" android:layout_marginEnd="20dp"
android:background="@drawable/love" /> android:background="@drawable/selector_love" />
</RelativeLayout> </RelativeLayout>
</com.example.musicplayer.widget.BackgroundAnimationRelativeLayout> </com.example.musicplayer.widget.BackgroundAnimationRelativeLayout>

@ -26,4 +26,9 @@
</RelativeLayout> </RelativeLayout>
</ScrollView> </ScrollView>
<View
android:layout_width="match_parent"
android:layout_height="65dp"
android:background="@color/transparent"
android:layout_alignParentBottom="true"/>
</RelativeLayout> </RelativeLayout>

@ -44,7 +44,7 @@
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1px"
android:background="@color/line"/> android:background="@color/line"/>

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/logo_white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<android.support.v7.widget.CardView
android:id="@+id/iv_album_pic"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginEnd="15dp"
android:layout_marginStart="15dp"
app:cardCornerRadius="5dp">
<ImageView
android:id="@+id/iv_album"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/jay"
/>
</android.support.v7.widget.CardView>
</LinearLayout>

@ -2,14 +2,15 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical"
android:background="@color/translucent">
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="15dp" android:layout_marginBottom="10dp"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginTop="15dp"> android:layout_marginTop="10dp">
<TextView <TextView
android:id="@+id/tv_new_song" android:id="@+id/tv_new_song"
@ -17,21 +18,22 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/song_list" android:text="@string/song_list"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="18sp" /> android:textSize="16sp"
android:layout_centerVertical="true"/>
<ImageView <ImageView
android:id="@+id/iv_point" android:id="@+id/iv_point"
android:layout_width="20dp" android:layout_width="15dp"
android:layout_height="20dp" android:layout_height="15dp"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_toRightOf="@+id/tv_new_song" android:layout_toRightOf="@+id/tv_new_song"
android:src="@drawable/down" /> android:src="@drawable/down" />
<ImageView <ImageView
android:id="@+id/iv_new_song_list" android:id="@+id/iv_add"
android:layout_width="30dp" android:layout_width="25dp"
android:layout_height="30dp" android:layout_height="25dp"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginEnd="20dp" android:layout_marginEnd="20dp"

@ -1,17 +1,35 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <com.andexert.library.RippleView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ripple"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="80dp" android:layout_height="wrap_content"
android:layout_marginTop="5dp" xmlns:app="http://schemas.android.com/apk/res-auto"
> >
<ImageView <LinearLayout
android:id="@+id/iv_face" android:layout_width="match_parent"
android:layout_gravity="center_vertical" android:layout_height="wrap_content"
android:layout_width="70dp" >
android:layout_height="70dp"
android:src="@drawable/background" <android.support.v7.widget.CardView
android:scaleType="centerCrop" android:id="@+id/iv_album_pic"
android:layout_marginStart="10dp"/> android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:layout_marginStart="10dp"
android:background="@color/white"
app:cardCornerRadius="8dp"
>
<ImageView
android:id="@+id/iv_album"
android:layout_width="60dp"
android:layout_height="60dp"
android:scaleType="centerCrop"
android:src="@drawable/love"
/>
</android.support.v7.widget.CardView>
<LinearLayout <LinearLayout
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
@ -22,25 +40,25 @@
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
> >
<TextView <TextView
android:id="@+id/tv_song_list_name" android:id="@+id/tv_album_name"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/love" android:text="@string/love"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="16sp"
/> />
<TextView <TextView
android:layout_marginTop="5dp" android:id="@+id/tv_author"
android:layout_marginTop="3dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="442首113首已下载" android:text="共32首"
android:textColor="#4f9a9f" android:textColor="@color/white_blue"
android:layout_marginBottom="15dp" android:layout_marginBottom="15dp"
android:textSize="14sp"
/> />
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:background="@color/white_easy"/>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</com.andexert.library.RippleView>

@ -4,23 +4,20 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/linear_function" android:layout_below="@+id/linear_function"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:background="@color/translucent"
android:orientation="vertical"> android:orientation="vertical">
<com.example.musicplayer.widget.MyListView <com.example.musicplayer.widget.MyListView
android:id="@+id/expand_lv_song_list" android:id="@+id/expand_lv_song_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:divider="@color/seekColor" android:divider="@color/line_default"
android:dividerHeight="1dip"> android:childDivider="@color/line_default"
android:groupIndicator="@null"
android:dividerHeight="1dip"
android:layout_marginBottom="70dp">
</com.example.musicplayer.widget.MyListView> </com.example.musicplayer.widget.MyListView>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/expand_lv_song_list"
android:background="@color/seekColor" />

@ -24,8 +24,8 @@
<ImageView <ImageView
android:id="@+id/iv_album" android:id="@+id/iv_album"
android:layout_width="wrap_content" android:layout_width="60dp"
android:layout_height="wrap_content" android:layout_height="60dp"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@drawable/welcome" android:src="@drawable/welcome"
/> />

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/btn_love"
android:title="收藏"
android:icon="@drawable/selector_love"
app:showAsAction="always"/>
</menu>

@ -23,4 +23,5 @@
<color name="white_blue">#caeefc</color> <color name="white_blue">#caeefc</color>
<color name="line">#50aebcbf</color> <color name="line">#50aebcbf</color>
<color name="blue">#555</color> <color name="blue">#555</color>
<color name="line_default">#1E000000</color>
</resources> </resources>

Loading…
Cancel
Save