2014-11-20 245 views
6

可以创建一个RippleDrawable来定义一个无边界的波纹,同时还有一个背景颜色? 我尝试了一切,但是当我定义一个形状和它的颜色时,波纹不再是无边界的。 也在本页https://developer.android.com/reference/android/graphics/drawable/RippleDrawable.html没有提及在形状上添加无限纹波。Android unbounded波纹和背景

我已经试过这层名单,但结果是可怕的

<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> 

这是我得到enter image description here

+0

检查selectableItemBackgroundBorderless – IuriiO 2014-11-20 19:37:53

+0

你的意思是我应该添加这个'style =“?android:attr/borderlessButtonStyle”'到按钮的xml?如果是,它的工作不:( – pier 2014-11-20 19:52:58

+0

它不是一种风格,但背景: 机器人:背景=“机器人:ATTR/selectableItemBackgroundBorderless” – IuriiO 2014-11-20 20:08:15

回答

18

首先记住,layer-list绘制的作品相似FrameLayout,它栈item s因为它们出现所以如果你想让你的涟漪在前面只是把它移下来

<?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> 

可生产你注意到它如何被“裁剪”的其他按钮有点像

layer list ripple on top

现在?它实际上是被透支,这是因为抽签顺序,其他的意见的背景绘制在上面,而不是波动实际上是越来越修剪,所以我能想到的几个解决方案,为您的特定布局:

一。摆脱layer-list绘制的,并只使用ripple作为按钮的背景下,使用您的shapecolor绘制作为ViewGroup背景,生产:

ripple only

注意,你失去了你的格子状,由于你的其他背景效果,但看看棒棒糖上的其他数字键盘,你会发现他们没有网格分隔符,如果你仍然希望他们用你的ViewGroup来绘制它们。

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

c。有另外一个考虑,但我只是忘了,可能会回来的梦想¯\ _(ツ)_ /¯

退房Calculator from AOSP,你可能要借用CalculatorPadLayout为网格,或只是学习他们是如何做到这一点:)

+0

嗨,谢谢:)我已经检查了AOSP计算器。他们实现了这个结果,包括两个不同的xml文件,其中第一个具有深灰色背景,后者具有浅灰色背景。两个按钮都具有标准纹波背景。 看来,这是唯一的方法,无边的波纹和条纹垂直背景 – pier 2014-12-04 13:24:53