代码组成部分
代码调用关系
核心代码分析
自己实现的功能分析
悬浮按钮(FAB)切换歌单
在MainActivity中设置一个悬浮按钮(FloatingActionButton)【即截图右下角的蓝色圆形按钮】来切换播放列表(最近播放列表/我的收藏列表)。
代码分析:
此功能调用一个FloatingActionButton库--SpringFloatingActionMenu。
首先,在项目的
dependencies {
...
implementation 'com.tiancaicc.springfloatingactionmenu:library:0.0.2'
...
}
在localMusicFragment中,在onCreate中添加fab的菜单按钮(最近播放和我的收藏)、设置动画类型、设置reveal效果的颜色、设置fab的位置、设置各个图标的resource。
//create your own FAB
//必须手动创建FAB, 并设置属性
final FloatingActionButton fab = new FloatingActionButton(mainActivity);
fab.setType(FloatingActionButton.TYPE_NORMAL);
fab.setImageResource(R.mipmap.heart_fill);
fab.setColorPressedResId(R.color.colorPrimary);
fab.setColorNormalResId(R.color.design_default_color_primary);
fab.setColorRippleResId(R.color.white);
fab.setShadow(true);
new SpringFloatingActionMenu.Builder(mainActivity)
.fab(fab)
//add menu item via addMenuItem(bgColor,icon,label,label color,onClickListener)
//添加菜单按钮参数依次是背景颜色,图标,标签,标签的颜色,点击事件
.addMenuItem(R.color.colorAccent, R.mipmap.back1, "最近播放", R.color.colorAccent, this)
.addMenuItem(R.color.colorAccent, R.mipmap.back1, "我的收藏", R.color.colorAccent, this)
//you can choose menu layout animation
//设置动画类型
.animationType(SpringFloatingActionMenu.ANIMATION_TYPE_BLOOM)
//setup reveal color while the menu opening
//设置reveal效果的颜色
.revealColor(R.color.colorPrimary)
//set FAB location, only support bottom center and bottom right
//设置FAB的位置,只支持底部居中和右下角的位置
.gravity(Gravity.RIGHT | Gravity.BOTTOM)
.onMenuActionListner(new OnMenuActionListener() {
@Override
public void onMenuOpen() {
//set FAB icon when the menu opened
//设置FAB的icon当菜单打开的时候
fab.setImageResource(R.mipmap.back1);
}
@Override
public void onMenuClose() {
//set back FAB icon when the menu closed
//设置回FAB的图标当菜单关闭的时候
fab.setImageResource(R.mipmap.back1);
}
})
.build();
相应地,onClick函数实现如下,通过menuItemView.getLabelTextView().getText()获取用户选中了fab的哪个菜单按钮:
public void onClick(View view) {
MenuItemView menuItemView = (MenuItemView) view;
menu = menuItemView.getLabelTextView().getText();
if (menuItemView.getLabelTextView().getText() == "最近播放") {
loadRecordData(); //准备最近播放的数据
mainActivity.playService.setMp3Infos(recordMp3Infos);//播放列表切换为最近播放
System.out.println("menuItemView record" + mainActivity.playService.mp3Infos);
mainActivity.playService.setChangePlayList(PlayService.RECORD_MUSIC_LIST);
mainActivity.pager.setCurrentItem(1);
} else {
loadLoveData(); //准备我的收藏的数据
mainActivity.playService.setMp3Infos(loveMp3Infos);
System.out.println("menuItemView love" + mainActivity.playService.mp3Infos);
mainActivity.playService.setChangePlayList(PlayService.LOVE_MUSIC_LIST);
mainActivity.pager.setCurrentItem(1);
}
}