package com.literem.matrix.music.fragment;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.os.Bundle;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.literem.matrix.common.bluetooth.BTData;
import com.literem.matrix.common.bluetooth.BTDialog;
import com.literem.matrix.common.bluetooth.BTUtils;
import com.literem.matrix.common.data.DataUtils;
import com.literem.matrix.common.dialog.DialogPrompt;
import com.literem.matrix.common.dialog.DialogSelectAnim;
import com.literem.matrix.common.dialog.PopupItemMenu;
import com.literem.matrix.common.font.CommandUtils;
import com.literem.matrix.common.utils.ToastUtils;
import com.literem.matrix.common.widget.DrawableTextView;
import com.literem.matrix.music.R;
import com.literem.matrix.music.activity.AddLyricActivity;
import com.literem.matrix.music.activity.MusicActivity;
import com.literem.matrix.music.activity.TextEditActivity;
import com.literem.matrix.music.callback.OnMusicDetailsDialogListener;
import com.literem.matrix.music.callback.OnMusicServiceListener;
import com.literem.matrix.music.callback.UpdateProgressListener;
import com.literem.matrix.music.dialog.DialogAddLyric;
import com.literem.matrix.music.dialog.DialogMusicInfo;
import com.literem.matrix.music.dialog.DialogMusicUpdateInfo;
import com.literem.matrix.music.dialog.PopMusicDetails;
import com.literem.matrix.music.dialog.PopMusicPlayList;
import com.literem.matrix.music.dialog.PopMusicPlayMode;
import com.literem.matrix.music.entity.Music;
import com.literem.matrix.music.service.MusicService;
import com.literem.matrix.music.utils.SQLiteMusicUtils;
import com.literem.matrix.music.widget.LyricView;
import java.util.Random;
public class MusicPlayFragment extends Fragment implements UpdateProgressListener {
public static final int CHANGE_VOLUME = 6;
public static final int PLAY_MODE = 7;
//歌词相关
public static final int AddLyricAction = 10;
public static final int AddLyric = 11;//增加歌词
public static final int RemoveLyric = 12;//删除歌词
public static final int UpdateLyric = 13;//修改歌词
public static final int MakeLyric = 14;//制作歌词
public static final int MusicInfo = 20;
public static final int MusicUpdateInfo = 21;
public static final int MusicUpdateInfoAction = 22;
private String[] strTimes = new String[]{"00:0%1$d","00:%1$d","0%1$d:0%2$d","0%1$d:%2$d","%1$d:0%2$d","%1$d:%2$d"};
//控件
private LyricView lyricView;
private ImageView ivPlay;
private ImageView ivPlayMode;
private TextView tvTitle, tvSinger;
private TextView tvCurrentTime,tvTotalTime;
private SeekBar seekBar;
private DrawableTextView dtvLyricSync,dtvConnectBT, dtvAnim;
//dialog
private PopMusicPlayList playList;//音乐列表的弹出框
private MusicService musicService;
private PopMusicDetails musicDetails;
private MusicActivity.OnJumpListener jumpListener;
private String[] listAnim = new String[]{"翻页动画","自定义动画"};
private boolean isSync = false;//是否同步歌词到点阵屏上
private boolean isTogglePage = true;//是否同步歌词到点阵屏上
private boolean isTouchSeekBar;//是否正在拖动进度条
private int imgStart,imgPause;//播放、暂停图标
private int dragProgress = 0;//拖动进度条的临时值
private int singleLoop, listOrder, listRandom;
private int currentMusicId = -1;//当前播放的音乐id
private int PlayMode;
private AudioManager am;//音量对象
private MusicActivity.UpdateHandler handler;
private Context context;
private BTDialog btDialog;
public MusicPlayFragment(Context context, PopMusicPlayList playList, MusicService musicService, MusicActivity.UpdateHandler handler, MusicActivity.OnJumpListener jumpListener){
this.context = context;
this.playList = playList;
this.musicService = musicService;
this.handler = handler;
this.jumpListener = jumpListener;
imgPause = R.drawable.img_player_start;
imgStart = R.drawable.img_player_pause;
listOrder = R.drawable.img_mode_order_white;
singleLoop = R.drawable.img_mode_single_loop_white;
listRandom = R.drawable.img_mode_random_white;
am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_music_play,container,false);
lyricView = view.findViewById(R.id.lyric_view);
lyricView.setOnLyricViewListener(onLyricViewListener);
dtvLyricSync = view.findViewById(R.id.dtv_lyric_sync);
dtvConnectBT = view.findViewById(R.id.dtv_connect_bt);
dtvAnim = view.findViewById(R.id.dtv_toggle_anim);
dtvLyricSync.setOnClickListener(onClickListener);
dtvConnectBT.setOnClickListener(onClickListener);
dtvAnim.setOnClickListener(onClickListener);
ivPlay = view.findViewById(R.id.iv_lyric_play);
ivPlayMode = view.findViewById(R.id.iv_lyric_play_mode);
tvTitle = view.findViewById(R.id.tv_lyric_title);
tvSinger = view.findViewById(R.id.tv_lyric_signer);
tvCurrentTime = view.findViewById(R.id.tv_lyric_current_time);
tvTotalTime = view.findViewById(R.id.tv_lyric_current_total_time);
seekBar = view.findViewById(R.id.sb_play_progress);
seekBar.setOnSeekBarChangeListener(mSeekBarChangeListener);
view.findViewById(R.id.iv_play_list).setOnClickListener(onClickListener);
view.findViewById(R.id.iv_lyric_next).setOnClickListener(onClickListener);
view.findViewById(R.id.iv_lyric_last).setOnClickListener(onClickListener);
ivPlay.setOnClickListener(onClickListener);
ivPlayMode.setOnClickListener(onClickListener);
view.findViewById(R.id.iv_lyric_more).setOnClickListener(onClickListener);
view.findViewById(R.id.iv_lyric_back).setOnClickListener(onClickListener);
ivPlayMode.setImageResource(listOrder);
this.PlayMode = playList.getPlayMode();//获取播放模式
//setPlayImage(false);//初次进入,设置播放图标为暂停
dtvConnectBT.setText(BTUtils.getInstance().getConnect()?"已连接":"未连接");
refreshPlayInfo();
return view;
}
//每次显示当前fragment时都调用,判断是否更新的歌曲信息
public void refreshPlayInfo(){
//检查播放模式是否改变了
if(this.PlayMode != playList.getPlayMode()){
setPlayMode(playList.getPlayMode());
}
//刷新播放图标
setPlayImage(musicService.getPlayingState());
//检查歌曲是否改变了,如果是,则要更新
if(musicService.getCurrentMusicId() != currentMusicId){
currentMusicId = musicService.getCurrentMusicId();
setPlayingInfo(musicService.getCurrentMusic());
}
}
private void refreshLyric(){
int musicId = musicService.getCurrentMusicId();
String lyric = SQLiteMusicUtils.getInstance(context).queryMusicLyric(musicId);
lyricView.setLrc(lyric);
}
//region 设置
/**
* 更新音量大小
* @param volume 音量
*/
public void setChangeVolume(int volume){
if(musicDetails != null) musicDetails.setVolume(volume);
}
private void setPlayImage(boolean status){
ivPlay.setImageResource(status ? imgStart : imgPause);
}
/**
* 设
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
嵌入式优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人单片机开发经验充足,深耕嵌入式领域,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明,项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要嵌入式物联网单片机相关领域开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注嵌入式领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【建议小白】: 在所有嵌入式开发中硬件部分若不会画PCB/电路,可选择根据引脚定义将其代替为面包板+杜邦线+外设模块的方式,只需轻松简单连线,下载源码烧录进去便可轻松复刻出一样的项目 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能
资源推荐
资源详情
资源评论
收起资源包目录
基于ESP32设计的多功能LED点阵屏幕的安卓上位机软件源码.zip(毕设/课设/竞赛/实训/项目开发) (456个子文件)
gradlew.bat 2KB
GBK16.bin 690KB
.gitignore 208B
.gitignore 7B
.gitignore 7B
.gitignore 7B
build.gradle 1KB
build.gradle 1KB
build.gradle 997B
build.gradle 558B
settings.gradle 66B
gradlew 5KB
hzk16 261KB
gradle-wrapper.jar 53KB
MusicPlayFragment.java 27KB
LyricView.java 26KB
GifDecoder.java 22KB
DisplayModuleActivity.java 22KB
SystemBarTintManager.java 18KB
DisplayFrameActivity.java 17KB
StatusBarUtil.java 17KB
MainActivity.java 16KB
MusicActivity.java 16KB
LyricMakeActivity.java 16KB
MusicListFragment.java 15KB
MainHomeFragment.java 13KB
MusicService.java 13KB
RowScrollView.java 12KB
CommandUtils.java 10KB
SQLiteMusicUtils.java 10KB
PopupGifFont.java 10KB
DisplayStaticActivity.java 10KB
BitmapUtils.java 9KB
BTUtils.java 9KB
TerminalActivity.java 9KB
PopMusicPlayList.java 9KB
PopupImageFont.java 9KB
PopupCharFont.java 8KB
DefaultLrcBuilder.java 8KB
AdapterMusicList.java 8KB
BaseBTActivity.java 8KB
DisplayScrollActivity.java 7KB
HexUtils.java 7KB
MultipleCircleView.java 7KB
AddLyricActivity.java 7KB
NotifyService.java 6KB
TerminalAdapter.java 6KB
LocalMusicUtils.java 6KB
AdapterPopupPlayList.java 6KB
BTDialog.java 6KB
DialogSelectAnim.java 6KB
DialogSetAnimation.java 5KB
ConnectBTAdapter.java 5KB
DialogNumberInput.java 5KB
DisplayUtil.java 5KB
TimeUtils.java 5KB
DialogMusicInfo.java 5KB
DrawableTextView.java 5KB
AdapterLocalLyric.java 5KB
DialogList.java 5KB
EncodeUtils.java 5KB
AdapterScanMusic.java 5KB
GBKFontUtils.java 5KB
PopMusicDetails.java 5KB
TextEditActivity.java 4KB
PopupImageFontAdapter.java 4KB
DialogTextInput.java 4KB
BTHandler.java 4KB
ScanMusicActivity.java 4KB
HZKFontUtils.java 4KB
GifFrameAdapter.java 4KB
ThreadLocalCoders.java 4KB
SoftKeyboardListener.java 4KB
LrcRow.java 4KB
DialogPrompt.java 4KB
OSUtils.java 3KB
MediaPlayerUtils.java 3KB
BaseActivity.java 3KB
DisplayClockActivity.java 3KB
HiddenAnimUtils.java 3KB
DialogAddLyric.java 3KB
MainMoreFragment.java 3KB
ResponseParse.java 3KB
PopupMessageMore.java 3KB
PopMusicPlayMode.java 3KB
BasePopupWindow.java 3KB
PlayListData.java 3KB
Music.java 3KB
PreMultipleCircleView.java 3KB
DialogWarn.java 3KB
LoadingDialog.java 3KB
PopupChooseMusic.java 3KB
SQLiteHelper.java 3KB
RoundImageView.java 2KB
BaseRecycleViewAdapter.java 2KB
ConfigUtils.java 2KB
DialogMusicUpdateInfo.java 2KB
FileUtils.java 2KB
PopupItemMenu.java 2KB
BaseDialog.java 2KB
共 456 条
- 1
- 2
- 3
- 4
- 5
资源评论
阿齐Archie
- 粉丝: 1w+
- 资源: 2303
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功