5

我想对按钮(在 android studio 中)有一个发光效果,如图所示:

按钮设计图片

我不想要背景图像,所以为了获得这种效果,我尝试在 xml 文件中进行操作。我为按钮添加了笔触,并为按钮提供了阴影(与笔触颜色相同)。

我使用了一个 90 度角的线性渐变,开始和结束颜色与笔划相同,中心颜色与背景颜色相同。请看代码:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <layer-list>
        <item android:right="5dp" android:top="0dp">
            <shape>
                <corners android:radius="50dp" />
                <gradient
                    android:angle="45"
                    android:startColor="#8008c3fa"
                    android:endColor="#8008c3fa"
                    android:type="linear"
                    />
            </shape>
        </item>
        <item android:bottom="5dp" android:left="6dp" android:right="10dp" android:top="5dp">
            <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
                <corners
                    android:radius="50dp"
                    />
                <gradient
                    android:angle="90"
                    android:centerX="50%"
                    android:centerColor="@color/trans_parent"
                    android:startColor="#8008c3fa"
                    android:endColor="#8008c3fa"
                    android:type="linear"
                    />
                <padding
                    android:left="0dp"
                    android:top="0dp"
                    android:right="0dp"
                    android:bottom="0dp"
                    />
                <size
                    android:width="270dp"
                    android:height="60dp"
                    />
                <stroke
                    android:width="2.5dp"
                    android:color="#08c3fa"
                    />
            </shape>
        </item>
    </layer-list>
</item>

</selector>

对于上面的 xml,我得到了以下结果:

代码中的结果图像

虽然设计和结果图像看起来完全不同,但我认为如果我们增加中心颜色高度并保持阴影淡出效果,它可以工作。但我不能这样做。

4

3 回答 3

3

我知道已经有一段时间了,但是如果有人仍然对这种效果感兴趣,这是我制作的一个自定义视图库,它的灵感来自这个问题:

发光和霓虹灯按钮

在此处输入图像描述

如图所示,它还具有动画禁用和启用方法。

它是 MIT 许可的,所以随心所欲。希望这可以帮助某人。

于 2021-04-10T20:58:57.000 回答
2

您可以通过在图层列表中添加另一个项目来增加中心颜色高度并保持对阴影的淡出效果。第一项为上界制作渐变,其余部分是透明的,第二项以相同方式为下界制作渐变。

我又添加了两个项目来填充左右半圆。我改变了一些颜色来增强效果,但没有尝试太久,我认为一个人可以用更多的物品和更好的颜色做更多的事情:)

干杯,乔什

最终结果:

最后一个按钮

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <layer-list>
            <item android:right="5dp" android:top="0dp">
                <shape>
                    <corners android:radius="50dp" />
                    <gradient
                        android:centerX="70%"
                        android:startColor="#804CD6FF"
                        android:centerColor="#8004485C"
                        android:endColor="#804CD6FF"
                        android:type="linear"
                        />
                </shape>
            </item>
            <item android:bottom="5dp" android:left="6dp" android:right="10dp" android:top="5dp">
                <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
                    <corners
                        android:radius="50dp"
                        />
                    <gradient
                        android:angle="90"
                        android:centerX="30%"
                        android:centerColor="@color/transparent"
                        android:startColor="#8008c3fa"
                        android:endColor="@color/transparent"
                        android:type="linear"
                        />
                    <size
                        android:width="270dp"
                        android:height="60dp"
                        />
                    <stroke
                        android:width="2.5dp"
                        android:color="#08c3fa"
                        />
                </shape>
            </item>
            <item android:bottom="5dp" android:left="6dp" android:right="10dp" android:top="5dp">
                <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
                    <corners
                        android:radius="50dp"
                        />

                    <gradient
                        android:angle="90"
                        android:centerX="70%"
                        android:centerColor="@color/transparent"
                        android:startColor="@color/transparent"
                        android:endColor="#8008c3fa"
                        android:type="linear"
                        />

                    <size
                        android:width="270dp"
                        android:height="60dp"
                        />
                </shape>
            </item>
            <!-- the glow for the half circles, possible with radius as well. I liked
                 android:type="sweep" better because radius tends to fade out.-->
            <item android:bottom="5dp" android:left="6dp" android:right="10dp" android:top="5dp">
                <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
                    <corners
                        android:radius="50dp"
                        />

                    <gradient
                        android:angle="360"
                        android:centerX="5%"
                        android:centerColor="#8008c3fa"
                        android:startColor="@color/transparent"
                        android:endColor="@color/transparent"
                        android:gradientRadius="360"
                        android:type="sweep"
                        />

                    <size
                        android:width="270dp"
                        android:height="60dp"
                        />
                </shape>
            </item>
            <item android:bottom="5dp" android:left="6dp" android:right="10dp" android:top="5dp">
                <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
                    <corners
                        android:radius="50dp"
                        />

                    <gradient
                        android:angle="360"
                        android:centerX="95%"
                        android:centerColor="@color/transparent"
                        android:startColor="#8008c3fa"
                        android:endColor="#8008c3fa"
                        android:gradientRadius="360"
                        android:type="sweep"
                        />

                    <size
                        android:width="270dp"
                        android:height="60dp"
                        />
                </shape>
            </item>
        </layer-list>
    </item>

</selector>
于 2020-12-13T23:16:57.980 回答
1

如果你想Buttons用一种不同的固体来改进霓虹灯gradients。看看我回答的这个相关帖子。我使用了来自“@Mehran B”的建议库,并将其与自定义drawable和透明相结合,stroke使其更具可修改性。正如您在下面的示例中看到的那样,gradients实体和阴影是分开的,因此更加灵活:

样品 1

样品 2

于 2021-07-30T00:51:40.960 回答