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

Sri*_*sha 8 android android-xml android-button android-drawable android-shapedrawable

我想在按钮上有发光效果(在 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>
Run Code Online (Sandbox Code Playgroud)

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

代码的结果图像

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

Meh*_*anB 8

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

发光和霓虹灯按钮

在此输入图像描述

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

它已获得麻省理工学院许可,因此您可以用它做任何您想做的事。希望这对某人有帮助。


小智 5

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

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

干杯,乔什

最终结果:

最后按钮

    <?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>
Run Code Online (Sandbox Code Playgroud)