From 15583cdd6592941a059a632203810d0ca2300e0e Mon Sep 17 00:00:00 2001 From: jsyjst Date: Tue, 4 Dec 2018 14:31:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=97=E8=A1=A8=E5=92=8C?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=82=B9=E5=87=BB=E6=B0=B4=E6=B3=A2=E7=BA=B9?= =?UTF-8?q?=E6=95=88=E6=9E=9C=EF=BC=8C=E5=90=8C=E6=97=B6=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E4=BA=86=E6=9C=80=E8=BF=91=E6=92=AD=E6=94=BE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 + .../musicplayer/adapter/AlbumSongAdapter.java | 9 +-- .../musicplayer/adapter/HistoryAdapter.java | 12 ++-- .../musicplayer/adapter/LoveSongAdapter.java | 72 ++++++++++--------- .../adapter/SearchContentAdapter.java | 18 ++--- .../adapter/SearchHistoryAdapter.java | 9 +-- .../musicplayer/adapter/SongAdapter.java | 26 ++----- .../musicplayer/constant/Constant.java | 1 + .../musicplayer/service/PlayerService.java | 6 +- .../musicplayer/view/CollectionFragment.java | 1 + .../musicplayer/view/HistoryFragment.java | 4 ++ .../musicplayer/view/LocalMusicFragment.java | 15 +++- .../musicplayer/view/MainActivity.java | 4 +- .../musicplayer/view/SearchFragment.java | 5 +- app/src/main/res/drawable/seekbar_bg.xml | 27 +++++++ app/src/main/res/layout/activity_play.xml | 5 +- .../main/res/layout/fragment_album_song.xml | 6 ++ app/src/main/res/layout/fragment_search.xml | 42 +++++++---- app/src/main/res/layout/player.xml | 54 ++++++++------ .../main/res/layout/recycler_album_item.xml | 15 ++-- .../res/layout/recycler_seek_history_item.xml | 15 ++-- .../main/res/layout/recycler_song_item.xml | 15 +++- .../res/layout/recycler_song_search_item.xml | 15 +++- 23 files changed, 245 insertions(+), 133 deletions(-) create mode 100644 app/src/main/res/drawable/seekbar_bg.xml diff --git a/app/build.gradle b/app/build.gradle index d60530b..f7e7d83 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,5 +58,7 @@ dependencies { implementation 'com.jpardogo.materialtabstrip:library:1.1.0' //litePal implementation 'org.litepal.android:java:3.0.0' + //水波纹按钮 + compile 'com.patrickpissurno:ripple-effect:1.3.1' } diff --git a/app/src/main/java/com/example/musicplayer/adapter/AlbumSongAdapter.java b/app/src/main/java/com/example/musicplayer/adapter/AlbumSongAdapter.java index de1f232..3067e4d 100644 --- a/app/src/main/java/com/example/musicplayer/adapter/AlbumSongAdapter.java +++ b/app/src/main/java/com/example/musicplayer/adapter/AlbumSongAdapter.java @@ -8,6 +8,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import com.andexert.library.RippleView; import com.example.musicplayer.R; import com.example.musicplayer.entiy.AlbumSong; import com.example.musicplayer.util.FileHelper; @@ -64,9 +65,9 @@ public class AlbumSongAdapter extends RecyclerView.Adapter { +public class LoveSongAdapter extends RecyclerView.Adapter { private static final String TAG = "LoveSongAdapter"; - private int footerViewType = 1; - private int itemViewType = 0; - private List mLoveList; - private Context mContext; - private int mLastPosition = -1; - private OnItemClickListener onItemClickListener; - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.onItemClickListener = onItemClickListener; - } - - public LoveSongAdapter(Context context, List loveList) { - mContext = context; - mLoveList = loveList; - } + private int footerViewType = 1; + private int itemViewType = 0; + private List mLoveList; + private Context mContext; + private int mLastPosition = -1; + private OnItemClickListener onItemClickListener; + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } + public LoveSongAdapter(Context context, List loveList) { + mContext = context; + mLoveList = loveList; + } - class ViewHolder extends RecyclerView.ViewHolder { - TextView songNameTv; - TextView singerTv; - View mItemView; - View playLine; + class ViewHolder extends RecyclerView.ViewHolder { + TextView songNameTv; + TextView singerTv; + View playLine; + RippleView item; - public ViewHolder(View itemView) { - super(itemView); - songNameTv = itemView.findViewById(R.id.tv_title); - singerTv = itemView.findViewById(R.id.tv_artist); - playLine = itemView.findViewById(R.id.line_play); - mItemView = itemView; - } + public ViewHolder(View itemView) { + super(itemView); + songNameTv = itemView.findViewById(R.id.tv_title); + singerTv = itemView.findViewById(R.id.tv_artist); + playLine = itemView.findViewById(R.id.line_play); + item = itemView.findViewById(R.id.ripple); + } } /** @@ -87,29 +87,31 @@ public class LoveSongAdapter extends RecyclerView.Adapter { TextView songNameTv; TextView artistTv; ImageView playingIv; - View songView; + RippleView songView; public ViewHolder(View itemView) { super(itemView); - songView = itemView; + songView = itemView.findViewById(R.id.ripple); songNameTv = itemView.findViewById(R.id.tv_song_name); artistTv = itemView.findViewById(R.id.tv_artist); playingIv = itemView.findViewById(R.id.iv_playing); @@ -106,23 +107,10 @@ public class SongAdapter extends RecyclerView.Adapter { getResources().getColor(R.color.white)); holder.playingIv.setVisibility(View.GONE); } - holder.songView.setOnClickListener(new View.OnClickListener() { + holder.songView.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() { @Override - public void onClick(View v) { - - //将点击的序列化到本地 - Song song = new Song(); - song.setSongName(mp3Info.getName()); - song.setSinger(mp3Info.getSinger()); - song.setUrl(mp3Info.getUrl()); - song.setDuration(mp3Info.getDuration()); - song.setCurrent(position); - song.setOnline(false); - song.setOnlineId(mp3Info.getSongId()); - song.setListType(Constant.LIST_TYPE_LOCAL); - FileHelper.saveSong(song); - - onItemClickListener.onSongClick(); + public void onComplete(RippleView rippleView) { + onItemClickListener.onSongClick(position); equalPosition(position); } }); @@ -154,7 +142,7 @@ public class SongAdapter extends RecyclerView.Adapter { public interface OnItemClickListener { - void onSongClick(); + void onSongClick(int position); } } diff --git a/app/src/main/java/com/example/musicplayer/constant/Constant.java b/app/src/main/java/com/example/musicplayer/constant/Constant.java index 09cc9ca..2892448 100644 --- a/app/src/main/java/com/example/musicplayer/constant/Constant.java +++ b/app/src/main/java/com/example/musicplayer/constant/Constant.java @@ -13,4 +13,5 @@ public class Constant { public static final int LIST_TYPE_ONLINE=5; public static final int LIST_TYPE_LOVE=6; public static final int LIST_TYPE_HISTORY=7; + public static final int HISTORY_MAX_SIZE=100; } diff --git a/app/src/main/java/com/example/musicplayer/service/PlayerService.java b/app/src/main/java/com/example/musicplayer/service/PlayerService.java index 712c62c..a700b64 100644 --- a/app/src/main/java/com/example/musicplayer/service/PlayerService.java +++ b/app/src/main/java/com/example/musicplayer/service/PlayerService.java @@ -447,12 +447,14 @@ public class PlayerService extends Service { history.saveAsync().listen(new SaveCallback() { @Override public void onFinish(boolean success) { - Log.d(TAG, "onFinish: " + success); if (success) { - Log.d(TAG, "onFinish: " + history.getName()); + if(LitePal.findAll(HistorySong.class).size()>Constant.HISTORY_MAX_SIZE){ + LitePal.delete(HistorySong.class,LitePal.findAll(HistorySong.class).get(0).getId()); + } } } }); + } }); diff --git a/app/src/main/java/com/example/musicplayer/view/CollectionFragment.java b/app/src/main/java/com/example/musicplayer/view/CollectionFragment.java index 0d10831..e24d86c 100644 --- a/app/src/main/java/com/example/musicplayer/view/CollectionFragment.java +++ b/app/src/main/java/com/example/musicplayer/view/CollectionFragment.java @@ -102,6 +102,7 @@ public class CollectionFragment extends Fragment { } private void showSongList() { + mRecycler.setHasFixedSize(true); mLoveList = orderList(LitePal.findAll(Love.class)); mAdapter = new LoveSongAdapter(getActivity(), mLoveList); mManager = new LinearLayoutManager(getActivity()); diff --git a/app/src/main/java/com/example/musicplayer/view/HistoryFragment.java b/app/src/main/java/com/example/musicplayer/view/HistoryFragment.java index 9aafae8..172823d 100644 --- a/app/src/main/java/com/example/musicplayer/view/HistoryFragment.java +++ b/app/src/main/java/com/example/musicplayer/view/HistoryFragment.java @@ -17,6 +17,7 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; +import android.widget.TextView; import com.example.musicplayer.R; import com.example.musicplayer.adapter.HistoryAdapter; @@ -47,6 +48,7 @@ public class HistoryFragment extends Fragment { private LinearLayout mSongListLinear; private RelativeLayout mEmptyRelative; private List mHistoryList; + private TextView mTitleTv; //注册广播 private IntentFilter intentFilter; private SongChangeReceiver songChangeReceiver; @@ -73,6 +75,8 @@ public class HistoryFragment extends Fragment { mBackIv = view.findViewById(R.id.iv_back); mEmptyRelative = view.findViewById(R.id.relative_empty); mSongListLinear = view.findViewById(R.id.linear_song_list); + mTitleTv = view.findViewById(R.id.tv_title); + mTitleTv.setText("最近播放"); return view; } diff --git a/app/src/main/java/com/example/musicplayer/view/LocalMusicFragment.java b/app/src/main/java/com/example/musicplayer/view/LocalMusicFragment.java index b7e3aa5..cbda372 100644 --- a/app/src/main/java/com/example/musicplayer/view/LocalMusicFragment.java +++ b/app/src/main/java/com/example/musicplayer/view/LocalMusicFragment.java @@ -25,6 +25,7 @@ import com.example.musicplayer.constant.BroadcastName; import com.example.musicplayer.constant.Constant; import com.example.musicplayer.contract.ILocalMusicContract; import com.example.musicplayer.entiy.LocalSong; +import com.example.musicplayer.entiy.Song; import com.example.musicplayer.presenter.LocalMusicPresenter; import com.example.musicplayer.service.PlayerService; import com.example.musicplayer.util.CommonUtil; @@ -135,7 +136,19 @@ public class LocalMusicFragment extends Fragment implements ILocalMusicContract. songAdapter.setOnItemClickListener(new SongAdapter.OnItemClickListener() { @Override - public void onSongClick() { + public void onSongClick(int position) { + //将点击的序列化到本地 + LocalSong mp3Info = mLocalSongsList.get(position); + Song song = new Song(); + song.setSongName(mp3Info.getName()); + song.setSinger(mp3Info.getSinger()); + song.setUrl(mp3Info.getUrl()); + song.setDuration(mp3Info.getDuration()); + song.setCurrent(position); + song.setOnline(false); + song.setOnlineId(mp3Info.getSongId()); + song.setListType(Constant.LIST_TYPE_LOCAL); + FileHelper.saveSong(song); mPlayStatusBinder.play(Constant.LIST_TYPE_LOCAL); } }); diff --git a/app/src/main/java/com/example/musicplayer/view/MainActivity.java b/app/src/main/java/com/example/musicplayer/view/MainActivity.java index 0f81ac2..3c7a042 100644 --- a/app/src/main/java/com/example/musicplayer/view/MainActivity.java +++ b/app/src/main/java/com/example/musicplayer/view/MainActivity.java @@ -25,6 +25,7 @@ import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; +import com.andexert.library.RippleView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.example.musicplayer.R; @@ -50,7 +51,7 @@ public class MainActivity extends AppCompatActivity { private boolean flag; //用做暂停的标记 private int time; //记录暂停的时间 private Button mPlayerBtn; - private ImageView mNextIv; + private RippleView mNextIv; private TextView mSongNameTv; private TextView mSingerTv; private CircleImageView mCoverIv;//封面 @@ -258,6 +259,7 @@ public class MainActivity extends AppCompatActivity { public void onDestroy() { unbindService(connection); unregisterReceiver(songChangeReceiver); + mSeekBarThread.interrupt(); Song song = FileHelper.getSong(); song.setCurrentTime(mPlayStatusBinder.getCurrentTime()); Log.d(TAG, "onServiceDisconnected: " + song.getCurrentTime()); diff --git a/app/src/main/java/com/example/musicplayer/view/SearchFragment.java b/app/src/main/java/com/example/musicplayer/view/SearchFragment.java index d392fc8..3e875e0 100644 --- a/app/src/main/java/com/example/musicplayer/view/SearchFragment.java +++ b/app/src/main/java/com/example/musicplayer/view/SearchFragment.java @@ -12,6 +12,7 @@ import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; +import com.andexert.library.RippleView; import com.example.musicplayer.R; import com.example.musicplayer.entiy.SearchHistory; import com.example.musicplayer.util.CommonUtil; @@ -27,8 +28,8 @@ import java.util.List; public class SearchFragment extends Fragment { private static final String TAG = "SearchFragment"; private EditText mSeekEdit; - private TextView mSeekTv; - private ImageView mBackIv; + private RippleView mSeekTv; + private RippleView mBackIv; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, diff --git a/app/src/main/res/drawable/seekbar_bg.xml b/app/src/main/res/drawable/seekbar_bg.xml new file mode 100644 index 0000000..671f87d --- /dev/null +++ b/app/src/main/res/drawable/seekbar_bg.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_play.xml b/app/src/main/res/layout/activity_play.xml index 4083003..b13449e 100644 --- a/app/src/main/res/layout/activity_play.xml +++ b/app/src/main/res/layout/activity_play.xml @@ -102,10 +102,13 @@ android:id="@+id/seek" style="@style/neteasa_music_time_seek_bar_sytle" android:layout_centerInParent="true" + android:progressDrawable="@drawable/seekbar_bg" + android:maxHeight="2dp" android:layout_toEndOf="@id/tv_current_time" android:layout_toStartOf="@+id/tv_duration_time" android:paddingEnd="15dp" - android:paddingStart="15dp" /> + android:paddingStart="15dp" + /> @@ -83,6 +86,9 @@ android:layout_height="wrap_content" android:layout_weight="3" android:text="周杰伦" + android:singleLine="true" + android:ellipsize="end" + android:paddingEnd="20dp" android:textColor="@color/white_blue" android:textSize="16sp" /> diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index f069193..33d8dd1 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -1,5 +1,6 @@ @@ -10,13 +11,19 @@ android:layout_height="?android:attr/actionBarSize" android:background="@color/actionBarColor"> - + android:layout_marginStart="10dp" + ripple:rv_centered="true"> + + + + android:textSize="16sp" /> - + + - + + diff --git a/app/src/main/res/layout/player.xml b/app/src/main/res/layout/player.xml index b553e37..238a042 100644 --- a/app/src/main/res/layout/player.xml +++ b/app/src/main/res/layout/player.xml @@ -1,13 +1,14 @@ + android:clickable="true" + android:elevation="10dp" + android:focusable="true"> + android:id="@+id/sb_progress" + style="@style/neteasa_music_time_seek_bar_sytle" /> + android:textSize="14sp" /> + android:textSize="12sp" /> - + ripple:rv_centered="true"> + + + -