在ImageButton外部实现Ripple效果

时间:2014-12-10 05:02:47

标签: android android-5.0-lollipop android-imagebutton rippledrawable

我正在尝试为ImageButton实现涟漪效果。我已经在src中设置了背景中的波纹和src中的可绘制图像。

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

它在按钮布局中给出了很好的连锁效果。但我希望Ripple效果也可以扩展到Button Layout之外。另一种方法是使用:

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

但它使用默认颜色和样式。如何在颜色,形状和尺寸方面对其进行自定义?

3 个答案:

答案 0 :(得分:19)

我遇到了这个,我的问题是' 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>

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

答案 1 :(得分:9)

就像他在评论中提到的@alan一样。如果创建没有蒙版和子项的涟漪项并将其添加为视图背景,则将在第一个可用父项的顶部绘制波纹,并可以扩展视图边界。 enter image description here

<!-- An unbounded red ripple. --/>
<ripple android:color="#ffff0000" />

答案 2 :(得分:9)

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

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

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

在您应用的主题中:

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

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

注意: 在21以下的设备上,纹波将变为具有您设置的相同颜色的正常选择器。