我正在尝试为ImageButton实现涟漪效果。我已经在src中设置了背景中的波纹和src中的可绘制图像。
android:background="@drawable/myripplexml"
android:src="@drawable/myimagepath"
它在按钮布局中给出了很好的连锁效果。但我希望Ripple效果也可以扩展到Button Layout之外。另一种方法是使用:
android:background="?android:attr/selectableItemBackgroundBorderless"
但它使用默认颜色和样式。如何在颜色,形状和尺寸方面对其进行自定义?
答案 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一样。如果创建没有蒙版和子项的涟漪项并将其添加为视图背景,则将在第一个可用父项的顶部绘制波纹,并可以扩展视图边界。
<!-- 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以下的设备上,纹波将变为具有您设置的相同颜色的正常选择器。