如何禁用Android Lollipop水波纹的alpha值?

19

我有一个使用自定义颜色的涟漪效果。然而,颜色永远不会完全不透明。根据(材料设计)涟漪的颜色应该是colorPrimary还是colorAccent?的答案,它始终具有40%的Alpha值。根据答案,我尝试使用以下针对v21的特定可绘制xml来在选择时强制使用不透明的红色背景:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="#ffff0000">
    <item android:id="@android:id/mask">
        <color android:color="#ffffffff" />
    </item>
</ripple>

然而,我总是得到一个透明的红色,而不是我想要的不透明红色。有没有可能得到一个不透明的涟漪效果?这是一个屏幕截图,其中红色从未完全不透明。

在此输入图片描述

您可以在https://github.com/gradha/Stackoverflow33217896找到涟漪效果的简单示例,其中包括使用XML涟漪和通过代码生成的另一个示例。后者表明,如果不重写代码,则无法实现不透明的涟漪效果。


8
正如您可以在RippleDrawable的源代码中看到的那样,halfAlpha被计算并应用于Paint对象。这是不可配置的,意味着没有通过样式或编程更改的if-else语句可以改变它。 - azizbekian
https://android.jlelse.eu/the-missing-custom-ripple-effect-library-834521721b41 - mudit_sen
你有任何解决方案吗? - zihadrizkyef
1个回答

1
你可以为有界涟漪简单地设置 alpha 值。
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?android:attr/colorAccent">
    <item android:id="@android:id/mask">
        <color android:color="#42ffffff" />
    </item>
</ripple>

对于无限纹波效果,如果您知道强调颜色,可以从颜色设置不透明度。

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/accent_26" />

colors.xml

<resources>
    ...
    <color name="accent">#ff33b5e5</color>
    <color name="accent_alpha26">#4233b5e5</color>
</resources>

颜色值...请仔细检查 - Lalit Jadav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接