gpt4 book ai didi

android - 如何使用自定义形状的 fab 按钮制作 Bottombar?

转载 作者:行者123 更新时间:2023-12-04 13:13:10 25 4
gpt4 key购买 nike

我想制作一个带有附加 fab 按钮的底部栏,如下图所示。如果有人知道那种底部带有 fab 的不同形状按钮库,请向我推荐。

下图给出了一个像这样的 fab 的底部栏。

enter image description here

最佳答案

这只是一个想法,代码可以改进。
您可以使用 shapeAppearanceOverlay 属性更改 FloatingActionButton 的形状:

<com.google.android.material.floatingactionbutton.FloatingActionButton
app:shapeAppearanceOverlay="@style/cutfab"
..>

与:

<style name="cutfab">
<item name="cornerFamily">cut</item>
<item name="cornerSize">15dp</item>
</style>

然后你可以在你的布局中定义BottomAppBar:

<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottomAppBar"
app:fabAlignmentMode="center"
app:fabCradleVerticalOffset="14dp"
app:fabCradleMargin="8dp" />

最后,您可以向 BottomAppBar 应用 TopEdgeTreatment。像这样的东西:

BottomAppBar bar = findViewById(R.id.bar);
BottomAppBarTopEdgeTreatment topEdge = new BottomAppBarCutCornersTopEdge(
bar.getFabCradleMargin(),
bar.getFabCradleRoundedCornerRadius(),
bar.getCradleVerticalOffset());
MaterialShapeDrawable babBackground = (MaterialShapeDrawable) bar.getBackground();

babBackground.setShapeAppearanceModel(
babBackground.getShapeAppearanceModel()
.toBuilder()
.setTopEdge(topEdge)
.build());

enter image description here

BottomAppBarCutCornersTopEdge 是这样的:

public class BottomAppBarCutCornersTopEdge extends BottomAppBarTopEdgeTreatment {

private final float fabMargin;
private final float cradleVerticalOffset;

BottomAppBarCutCornersTopEdge(
float fabMargin, float roundedCornerRadius, float cradleVerticalOffset) {
super(fabMargin, roundedCornerRadius, cradleVerticalOffset);
this.fabMargin = fabMargin;
this.cradleVerticalOffset = cradleVerticalOffset;
}

@Override
@SuppressWarnings("RestrictTo")
public void getEdgePath(float length, float center, float interpolation, ShapePath shapePath) {
float fabDiameter = getFabDiameter();
if (fabDiameter == 0) {
shapePath.lineTo(length, 0);
return;
}

float diamondSize = fabDiameter / 2f;
float middle = center + getHorizontalOffset();

float verticalOffsetRatio = cradleVerticalOffset / diamondSize;
if (verticalOffsetRatio >= 1.0f) {
shapePath.lineTo(length, 0);
return;
}

shapePath.lineTo(middle - (fabMargin + diamondSize), 0);
shapePath.lineTo(middle - fabDiameter/3, (diamondSize - cradleVerticalOffset + fabMargin) * interpolation);
shapePath.lineTo(middle + fabDiameter/3, (diamondSize - cradleVerticalOffset + fabMargin) * interpolation);
shapePath.lineTo(middle + (fabMargin + diamondSize), 0);
shapePath.lineTo(length, 0);
}

}

要获得更好的结果,您应该扩展 CutCornerTreatment,在 getCornerPath 方法中实现 BottomAppBar 中使用的相同路径并应用它到 FloatingActionButton

关于android - 如何使用自定义形状的 fab 按钮制作 Bottombar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62888408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com