Android无界涟漪与背景

Android无界涟漪与背景,android,android-5.0-lollipop,rippledrawable,Android,Android 5.0 Lollipop,Rippledrawable,是否可以创建一个RippleDrawable,定义一个无限的涟漪,同时定义一个背景色? 我尝试了所有的方法,但是当我定义一个形状和它的颜色时,涟漪不再是无限的。 在本页中也没有关于在形状上添加无限波纹的参考 我试过使用这个图层列表,但结果很糟糕 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <ripple

是否可以创建一个RippleDrawable,定义一个无限的涟漪,同时定义一个背景色? 我尝试了所有的方法,但是当我定义一个形状和它的颜色时,涟漪不再是无限的。 在本页中也没有关于在形状上添加无限波纹的参考

我试过使用这个图层列表,但结果很糟糕

    <layer-list 
        xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <ripple
        android:color="@color/android_l_light_gray">
    </ripple>
</item>

<item>      
    <shape
        android:shape="rectangle">
        <solid android:color="@color/android_l_dark_gray" />
    </shape>    
</item> </layer-list>


这是我首先得到的

请记住,
图层列表
可绘制的工作原理类似于
框架布局
,它会在项目出现时堆叠
项目
s,因此如果您想让涟漪在前面,只需将其向下移动即可


产生类似于

现在您注意到它是如何被其他按钮“剪裁”的了吗?它实际上被透支了,这是因为绘制顺序,其他视图的背景被绘制在顶部,而不是波纹实际上被剪裁,因此我可以为您的特定布局想出一些解决方案:

a。摆脱
图层列表
可绘制,仅使用
涟漪
作为按钮背景,使用
形状
颜色
可绘制作为
视图组
背景,生成:

请注意,由于您的其他背景,您失去了类似网格的效果,但看看棒棒糖上的其他数字垫,您会注意到它们没有网格分隔符,如果您仍然希望它们使用
视图组来绘制它们

b。使用/绘制ripple作为前景/覆盖/可绘制Top drawable,另一个作为背景,但我认为您可能会遇到与以前类似的绘制顺序问题

c。还有一个,但我忘了,可能会像梦一样回来\_(ツ)_/“”

检查一下,您可能想要借用网格的
CalculatorPadLayout
,或者只是了解他们是如何做到的:)

XML

<Button
        android:id="@+id/btn_key_seven"
        style="@style/AppTheme.KeypadButton"
        android:text="@string/str_one" />

风格


@可拉伸/按钮\u波纹\u效果\u无限
@颜色/原色暗
可牵引

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

Working awesome for me

```
为我工作太棒了

选中SelectableItemBackgroundBorderless您的意思是我应该将此
style=“?android:attr/borderlessButtonStyle”
添加到按钮的xml中?如果是,它不起作用:(它不是一种样式,但是背景:android:background=“?android:attr/selectableItemBackgroundBorderless”你试过使用LayerDrawable吗?@luriiO如果我添加它作为背景,那么我将无法更改背景颜色嗨,谢谢:)我已经检查了AOSP计算器。他们实现了这一结果,包括两个不同的xml文件,其中第一个是深灰色背景,第二个是浅灰色背景。。在这两个按钮中,都有标准波纹背景。这似乎是唯一一种拥有无限波纹和条纹垂直背景的方法
<?xml version="1.0" encoding="utf-8"?>
   <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <ripple android:color="@color/colorPrimaryDark"/>
    </item>
</layer-list>```

Working awesome for me