直播带货系统源码利用FloatingActionButton实现 展开/折叠多级悬浮菜单

直播带货系统源码利用FloatingActionButton实现 展开/折叠多级悬浮菜单的相关代码
1.大家看一下,我们最终提供出来的调用的示例:

//初始化2个Item弹出菜单
val expandFbItemList: MutableList<MultiFabItem> = mutableListOf(
MultiFabItem(...),
MultiFabItem(...)
)
val context = LocalContext.current
//创建一个MultiFloatingActionButton组件
MultiFloatingActionButton(srcIcon = Icons.Filled.Add,
showLabels = true,items = expandFbItemList) {
//item被点击了
Toast.makeText(context.applicationContext,"点击了:${it.label}",Toast.LENGTH_SHORT).show()
}

 

2.我们需要实现展开和折叠功能,首先需要定义一个状态类

 

enum class MultiFabState {
Collapsed,
Expanded
}

3.我们需要外部能修改菜单内的数据,定义一个Item实体bean

class MultiFabItem(
//Fab中心Icon
val icon: ImageVector,
//提示文本内容
val label: String,
//Fab中心Icon颜色
val srcIconColor: Color = Color.White,
//提示文本内容颜色
val labelTextColor: Color = Color.White,
//提示文本内容区域背景色
val labelBackgroundColor: Color = Color.Black.copy(alpha = 0.6F),
//Fab按钮背景色
val fabBackgroundColor: Color = Color.Unspecified,
)

 

4.定义一个MultiFloatingActionButton的Compose方法

@Composable
fun MultiFloatingActionButton(
modifier: Modifier = Modifier,
//“+”号按钮的图片
srcIcon: ImageVector,
//“+”号按钮的颜色
srcIconColor: Color = Color.White,
//“+”号按钮区域背景色
fabBackgroundColor: Color = Color.Unspecified,
//是否显示item的label内容
showLabels: Boolean = true,
//所有展开的菜单Item
items: List<MultiFabItem>,
//菜单Item的点击回调
onFabItemClicked: (item: MultiFabItem) -> Unit
)

 

5.定义动画,用于折叠和展开菜单显示的动画

//下面【省略号】的部分代码,文章【末尾会有全量的代码】【贴图】,有需要的可以去看一下。
//当前菜单默认状态处于:Collapsed
val currentState = remember { mutableStateOf(MultiFabState.Collapsed) }
//创建过渡对象,用于管理多个动画值,并且根据状态变化运行这些值
val transition = updateTransition(targetState = currentState, label = "")
//用于+号按钮的旋转动画
val rotateAnim: Float by transition.animateFloat(.....) { state ->
//根据state来设置最终的角度
if (state.value == MultiFabState.Collapsed) 0F else -45F
}
//透明度动画
val alphaAnim: Float by transition.animateFloat(....) { state ->
if (state.value == MultiFabState.Expanded) 1F else 0F
}
//记录每个Item的收缩动画的Transition
val shrinkListAnim:MutableList<Float> = mutableListOf()
items.forEachIndexed { index, _ ->
val shrinkAnim by transition.animateFloat(.....)
//添加到收缩列表中
shrinkListAnim.add(index,shrinkAnim)
}

 

6.使用Box包裹我们的所有FloatingActionButton

Box(modifier = modifier, contentAlignment = Alignment.BottomEnd) {
items.forEachIndexed{index, item ->
Row(....){
if(showLabels){
Text(....)
}
FloatingActionButton(....)
}
}
FloatingActionButton(....)
}

 

以上就是直播带货系统源码利用FloatingActionButton实现 展开/折叠多级悬浮菜单的相关代码, 更多内容欢迎关注之后的文章

posted @ 2021-08-31 14:23  云豹科技-苏凌霄  阅读(145)  评论(0编辑  收藏  举报