Android:向按钮添加霓虹灯发光效果

时间:2020-09-20 10:28:37

标签: android android-xml android-drawable android-button android-shapedrawable

我希望对按钮(在Android Studio中)具有发光效果,如图所示:

Button design image

我不想要背景图像,因此为了获得这种效果,我尝试在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,我得到了以下结果:

Result image from code

尽管设计和结果图像看起来完全不同,但我认为如果我们增加中心颜色的高度并保持阴影的淡入效果,它就可以工作。但是我无法做到这一点。

3 个答案:

答案 0 :(得分:1)

可以通过在图层列表中添加标记项来增加中心颜色的高度并保持阴影的淡入效果。 第一项以相同的方式为上界创建渐变,其余项是透明的,第二项以相同的方式为下界生成渐变。

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

干杯,乔什

最终结果:

final button

    <?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>

答案 1 :(得分:1)

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

Glowing and Neon Button

enter image description here

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

它已获得 MIT 许可,因此可以随心所欲地使用它。希望这对某人有所帮助。

答案 2 :(得分:1)

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

Sample 1

Sample 2

相关问题