可以创建一个 RippleDrawable 来定义一个无限的波纹,同时定义一个背景颜色吗? 我已经尝试了一切,但是当我定义一个形状及其颜色时,波纹不再是无限的。 也在这个页面 https://developer.android.com/reference/android/graphics/drawable/RippleDrawable.html没有关于在形状上添加无限波纹的引用。
我试过这个图层列表,但结果很糟糕
<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>
这就是我得到的
最佳答案
首先请记住,layer-list
可绘制对象的工作方式类似于 FrameLayout
,它会按出现的方式堆叠 item
,因此如果您需要让你的涟漪在前面只需将它向下移动
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="rectangle">
<solid android:color="@color/android_l_dark_gray"/>
</shape>
</item>
<item>
<ripple android:color="@color/android_l_light_gray"/>
</item>
</layer-list>
产生类似的东西
现在您注意到它是如何被其他按钮“截断”的了吗?它实际上被 overdraw 了,这是因为绘制顺序,其他 View 的背景被绘制在最上面,而不是波纹实际上被剪掉了,所以我可以为您的特定布局想出一些解决方案:
一个。去掉 layer-list
可绘制对象,只使用 ripple
作为按钮背景,使用 shape
或 color
可绘制为您的 ViewGroup
背景,产生:
请注意,由于您的其他背景,您失去了类似网格的效果,但看看 Lollipop 上的其他数字键盘,您会发现它们没有网格分隔符,如果您仍然希望它们使用您的 ViewGroup
来绘制它们。
使用/绘制你的波纹作为前景/覆盖/drawableTop 可绘制,另一个作为背景,但我认为你可能会遇到与以前类似的绘制顺序问题。
本来还有一个想着忘记了,说不定还会像梦一样回来呢¯\_(ツ)_/¯
查看 Calculator from AOSP ,您可能想为您的网格借用 CalculatorPadLayout
,或者只是学习他们是如何做的:)
关于安卓无界波纹和背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047705/