【问题标题】:Android: Add neon glow effect to buttonAndroid:为按钮添加霓虹灯效果
【发布时间】:2021-01-06 16:51:21
【问题描述】:

我想对按钮(在 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,我得到了以下结果:

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

【问题讨论】:

  • 您可以使用 Figma 或 Adob​​e XD 设计一个,并将资源用作按钮
  • @Ali,感谢您的回复。但是我们不能用xml本身来做吗?
  • 我没有在android中尝试过这种级别的渐变,所以说实话我真的不知道它是否可能
  • 我没有在android中尝试过这种级别的渐变,所以说实话我真的不知道它是否可能

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


【解决方案1】:

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

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

干杯,乔什

最终结果:

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

【讨论】:

    【解决方案2】:

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

    Glowing and Neon Button

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 2015-02-14
        相关资源
        最近更新 更多