【问题标题】:Android: can you have a ripple effect whose default state color is transparent?Android:你能有一个默认状态颜色是透明的涟漪效果吗?
【发布时间】:2015-04-03 05:26:59
【问题描述】:

类似于以下内容,但它不起作用。如果我将可绘制颜色切换为蓝色,它就可以工作。

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

【问题讨论】:

  • 不起作用是什么意思?
  • 如果可绘制颜色是透明的,则不再有波纹
  • 如果 drawable 是透明的,则没有颜色可以产生波纹。
  • 我有一个可点击的线性布局,其中包含一个 ImageView 和一个 TextView。这两个子视图都有不同的颜色。我正在尝试将波纹效果应用于整个线性布局,但保留子视图的不同背景颜色。
  • 如果你想在一个透明的形状上有一个波纹,这个答案显示了如何做到这一点:stackoverflow.com/a/41097020/4034572

标签: android android-layout android-view android-selector


【解决方案1】:

需要添加掩码:

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

【讨论】:

  • 这应该是公认的答案。就是这个!!谢谢!
  • 在我注意到遮罩颜色为白色时起作用(仔细想想,这很有意义)。
  • 它可以是任何颜色,也可以是任何可绘制的,但不透明。
  • 最佳答案,正是我需要的!
  • 如何在java中动态做同样的事情?
【解决方案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 的答案。

【讨论】:

  • 正如他承认的那样,这并不能真正回答问题,它只是一个糟糕的解决方法。虽然具有纯色背景色会使波纹起作用,但这正是我们想要避免的。为什么?因为用户从未真正看到 的这种背景颜色始终会造成不必要的过度绘制,即使没有波纹也是如此。自行检查:转到开发人员选项并启用过度绘制(调试 GPU 过度绘制 -> 显示过度绘制区域)。您会看到背景被两次 涂上了相同 的颜色,这是一种浪费。当然对于一个小按钮来说,有点透支是可以接受的。
  • 我在这里找到了透明形状上的波纹stackoverflow.com/a/41097020/4034572
猜你喜欢
  • 1970-01-01
  • 2015-06-09
  • 2016-11-14
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多