Android无限涟漪和背景

时间:2014-11-20 19:17:31

标签: android android-5.0-lollipop rippledrawable

可以创建一个定义无界​​纹波的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>

这就是我得到的enter image description here

2 个答案:

答案 0 :(得分:18)

首先请注意,layer-list drawable与FrameLayout类似,它会显示item,因为如果你想让你的涟漪在前面只是向下移动< / p>

<?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 drawable并仅使用ripple作为您的按钮背景,使用shapecolor drawable作为ViewGroup背景,生成:

ripple only

请注意,由于你的其他背景,你失去了网格效果,但是看看棒棒糖上的其他数字键盘你会注意到他们没有网格分隔符,如果你仍然希望他们使用你的ViewGroup画它们。

湾使用/绘制你的纹波作为foreground / overlay / drawableTop drawable,另一个作为背景,但我认为你可能会遇到类似于绘图顺序的问题。

℃。还有另外一个但我忘了,可能会像梦一样回来¯\ _(ツ)_ /¯

结帐Calculator from AOSP,您可能希望为您的网格借用CalculatorPadLayout,或者只是了解他们是如何做到的:)

答案 1 :(得分:0)

XML

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

样式

  <style name="AppTheme.KeypadButton" parent="Base.Widget.AppCompat.Button.Borderless">
    <item name="android:background">@drawable/button_ripple_effect_unbounded</item>
    <item name="android:colorBackground">@color/colorPrimaryDark</item>
</style>

可绘制

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