安卓无界波纹和背景

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

最佳答案

首先请记住,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>

产生类似的东西

layer list ripple on top

现在您注意到它是如何被其他按钮“截断”的了吗?它实际上被 overdraw 了,这是因为绘制顺序,其他 View 的背景被绘制在最上面,而不是波纹实际上被剪掉了,所以我可以为您的特定布局想出一些解决方案:

一个。去掉 layer-list 可绘制对象,只使用 ripple 作为按钮背景,使用 shapecolor可绘制为您的 ViewGroup 背景,产生:

ripple only

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

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

本来还有一个想着忘记了,说不定还会像梦一样回来呢¯\_(ツ)_/¯

查看 Calculator from AOSP ,您可能想为您的网格借用 CalculatorPadLayout,或者只是学习他们是如何做的:)

关于安卓无界波纹和背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047705/

相关文章:

android - Android Lollipop 中的自定义日期选择器对话框

Android L——在 View 上播放波纹效果

java - 你如何获得按钮的背景颜色?

java - SDK还没有初始化,一定要先调用FacebookSdk.sdkInitialize()

java - Android 保护 list admob

android - 使用新的 Android camera2 api 从 YUV_420_888 进行 JPEG 编码时的绿色图像

java - 如何以编程方式更改选择器内形状的颜色?

android - 创建一个没有透明度的波纹可绘制对象

android - "Error using newLatLngBounds(LatLngBounds, int): Map size can' t 为零...."在 Android 上使用 react-native-maps

java - 字符串编码不输出所有字符