安卓:你能有一个默认状态颜色为透明的涟漪效果吗?

23

以下是类似的代码,但它不能正常工作。如果我将可绘制颜色切换为蓝色之类的颜色,则可以正常工作。

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:drawable="@android:color/transparent"/>
</ripple>

你说的“不工作”是什么意思? - iheanyi
如果可绘制的颜色是透明的,就不会产生任何涟漪。 - ZakTaccardi
如果可绘制对象是透明的,则没有颜色可以产生涟漪效果。 - iheanyi
我有一个可点击的线性布局,其中包含一个ImageView和一个TextView。这两个子视图具有不同的颜色。我正在尝试将涟漪效果应用于整个线性布局,但保留子视图的不同背景颜色。 - ZakTaccardi
如果您想在透明形状上产生涟漪效果,可以参考以下答案:https://dev59.com/HV0b5IYBdhLWcg3wOvGd#41097020 - Albert Vila Calvo
2个回答

84

需要添加口罩:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
     <item android:id="@android:id/mask">
       <color android:color="@android:color/white" />
     </item>
</ripple>

4
这应该是被采纳的答案。就是这个了!谢谢! - Sotti
1
一旦我注意到遮罩颜色是白色的(一旦你想到这一点就很有道理),它就可以工作了。 - SMBiggs
4
它可以是任何颜色或图案,但不能是透明的。 - ataulm
最佳答案,正是我所需要的! - Luis
如何在Java中动态地执行相同的操作? - dev1993
请参考以下内容:https://dev59.com/G10a5IYBdhLWcg3wPWlN - loeschg

2

不知何故,@JMPergar的答案对我无效。

然而,我想到了这个解决方法:如果透明按钮后面的颜色是纯色(不是渐变或斑点图片),那么您可以将该颜色用作主按钮未按下时的颜色。

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/profile_transparent_button_pressed"
        >

    <item>
        <shape>
            <corners android:radius="@dimen/profile_transparent_button_corner_radius" />
            <solid android:color="@color/profile_background" />
        </shape>
    </item>
</ripple>

其中@color/profile_transparent_button_pressed是用于突出显示按钮的颜色,而@color/profile_background是此按钮背后布局的颜色。它的功能确切符合预期,但仍然肯定是一种解决方法,因此您应该首先尝试@JMPergar的答案。


1
正如他所承认的那样,这并没有真正回答问题,而只是一个糟糕的解决方法。虽然拥有坚实的背景颜色可以使涟漪工作,但这正是我们想要避免的。为什么?因为用户从未真正看到的这种背景颜色会在没有涟漪的情况下一直创建不必要的超绘制。自己检查一下:进入开发者选项并启用超绘制(调试GPU超绘制->显示超绘制区域)。您将看到背景使用相同的颜色进行了两次着色,这是一种浪费。当然,对于一个小按钮来说,稍微超绘制一点是可以接受的。 - Albert Vila Calvo
1
我在这里找到了如何让透明形状上出现涟漪效果的方法:https://dev59.com/HV0b5IYBdhLWcg3wOvGd#41097020 - Albert Vila Calvo

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