9

是否可以创建一个 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>

这就是我得到的在此处输入图像描述

4

2 回答 2

22

首先请记住,drawable的layer-list工作方式类似于FrameLayoutitem

<?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用作您的按钮背景,使用您的shapecolor可绘制对象作为您的ViewGroup背景,产生:

仅波纹

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

湾。使用/绘制你的波纹作为前景/叠加/drawableTop可绘制,另一个作为背景,但我认为你可能会遇到与以前类似的绘制顺序问题。

C。想到了另一个但我忘了,可能会像梦一样回来¯\_(ツ)_/¯

查看AOSP 的计算器,您可能想CalculatorPadLayout为您的网格借用,或者只是了解他们是如何做到的 :)

于 2014-12-02T23:40:19.487 回答
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
于 2020-09-25T13:12:58.437 回答