31

我正在尝试为 ImageButton 实现波纹效果。我在背景中设置了波纹,并在 src 中为它设置了可绘制图像。

android:background="@drawable/myripplexml"
android:src="@drawable/myimagepath"

它在按钮布局内提供了很好的涟漪效果。但我希望波纹效果也扩展到按钮布局之外。另一种方法是使用:

 android:background="?android:attr/selectableItemBackgroundBorderless"

但它使用默认颜色和样式。我如何定制它的颜色、形状和大小?

4

3 回答 3

23

我遇到了这个问题,我的问题是“selectableItemBackgroundBorderless”创建了一个矩形,而我的按钮是圆形的。我不确定这是否回答了原始问题,但这是我发现的:在 drawable-v21 中将背景设置为此

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

和较低 api 级别的 @null (假设您使用的是实际图像按钮 src 的选择器)。在按钮的填充中最明显的波纹。如果根本没有遮罩层波纹是未绑定的,并且有点占据整个屏幕。如果不是圆形,您可以使用任何您想要的形状。

于 2015-05-04T16:34:38.037 回答
19

如果您像我一样懒惰,请使用默认的波纹并忘记向后兼容性。基本上,您可以将两种类型的背景波纹添加到您的视图中:

 ?android:selectableItemBackground // Ripple within view
 ?android:selectableItemBackgroundBorderless //Ripple outside view

不幸的是,这些涟漪始终是灰色的。要根据您的主题调整这些,请转到您的父主题并更改 colorControlHighlight。

在您应用的主题中:

<item name="colorControlHighlight">#1bff3a</item>

此值将更改默认波纹的颜色。

注意:在 21 岁以下的设备上,波纹会变成与您设置的颜色相同的正常选择器。

于 2016-09-28T14:32:36.757 回答
13

就像@alan 在他的评论中提到的那样。如果您创建一个没有遮罩和子项的波纹项并将其添加为视图背景,则波纹将绘制在第一个可用父项的顶部,并且可能会扩展视图边界。这在文档中提到

<!-- An unbounded red ripple. --/>
<ripple android:color="#ffff0000" />
于 2015-12-30T13:22:04.470 回答