当前位置: 首页 > 知识库问答 >
问题:

如何在选择器的视图范围内保持涟漪效应?

缑桐
2023-03-14

我正在试图找出为什么我的涟漪效应不符合我放置它的形状。下面是我正在使用的代码:

这是我设置到ImageViews背景的多用途按钮

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Enabled, Not Clicked -->
    <item
        android:state_enabled="true"
        android:state_pressed="false"
        android:drawable="@drawable/some_drawable_1"
        android:color="@color/Black"
        />

    <!-- Not Enabled, Not Clicked -->
    <item
        android:state_enabled="false"
        android:state_pressed="false"
        android:drawable="@drawable/some_drawable_1"
        android:color="@color/LightGrey"
        />

    <!-- Not Enabled, Clicked -->
    <item
        android:state_enabled="false"
        android:state_pressed="true"
        android:drawable="@drawable/some_drawable_1"
        android:color="@color/LightGrey"
        />

    <!-- Enabled, Clicked -->
    <item
        android:state_enabled="true"
        android:state_pressed="true"
        android:drawable="@drawable/the_drawable_I_am_working_on"
        android:color="@color/White"
        />
</selector>

这是我正在研究的可抽屉:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Ripple 1 -->
    <!-- Button -->
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <solid
                android:color="@color/colorPrimary" />
            <stroke
                android:width="1dp"
                android:color="@color/black" />
            <corners
                android:bottomLeftRadius="8dp"
                android:bottomRightRadius="8dp"
                android:topLeftRadius="8dp"
                android:topRightRadius="8dp" />

        </shape>
    </item>
    <!-- Ripple -->
    <item>
        <ripple xmlns:android="http://schemas.android.com/apk/res/android"
            android:color="@color/colorPrimaryDarkest" />
    </item>
</layer-list>

<?xml version="1.0" encoding="utf-8"?>
<!-- Ripple 2 -->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/colorPrimaryDarkest">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <solid
                android:color="@color/colorPrimary" />
            <stroke
                android:width="1dp"
                android:color="@color/black" />
            <corners
                android:bottomLeftRadius="8dp"
                android:bottomRightRadius="8dp"
                android:topLeftRadius="8dp"
                android:topRightRadius="8dp" />

        </shape>
    </item>
</ripple>

正如您在这个版本中所看到的,虽然它已经修复了现在在边界内的问题,但它不再保持涟漪效应;它缓慢地将背景色转换为第二种颜色,而不是产生实际的涟漪效果。

另外,为了明确起见,我还尝试将形状移动到它自己的可绘制文件(名为testing2),然后像下面这样引用它:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorPrimaryDarkest">
    <item android:drawable="@drawable/testing2"/>
</ripple>

它也做同样的事情。

<?xml version="1.0" encoding="utf-8"?>
<!-- Ripple 2 -->
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorPrimaryDarkest">
    <item
        android:id="@android:id/mask"
        android:drawable="@drawable/testing2" />
</ripple>

我还尝试了关于以下其他StackOverflow问题的提示:

1)如何在带有圆角的布局上添加波纹效果?

2)如何在简单布局中创建涟漪效果

共有1个答案

张成济
2023-03-14

我终于明白了:

我使用了这个库:https://github.com/balysv/Material-Ripple。

取一个您希望具有圆形涟漪角的按钮(或任何视图),并在XML中用“com.balysv.MaterialRipple.MaterialRippleLayout”包装它,然后确保将rippleRoundedCorners和rippleOverlay属性添加到该XML包装器中。它将如下所示:

<com.balysv.materialripple.MaterialRippleLayout
    android:id="@+id/ripple"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:mrl_rippleOverlay="true"
    app:mrl_rippleRoundedCorners="18dp">
    <!-- Make sure the mrl_rippleRoundedCorners value is the same as the button's background's corner radius -->

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Button inside a ripple"
    android:background="@drawable/rounded_background"/>

</com.balysv.materialripple.MaterialRippleLayout>

对于包装器中的“mrl_rippleRoundedCorners”属性,确保其值与按钮背景中的圆角半径相同。

 类似资料:
  • 我一直在为Lollipop(API 21)开发一个应用程序。 XML:

  • 我使用以下xml drawable作为我的recyclerview列表项的背景。 触摸选择器。xml 触摸选择器底部。xml 在列表项中,我正在使用触摸选择器。xml在我的列表_item _quote中如下所示。xml 我有另一个xml绘图touch_selector_dark.xml和touch_selector_base_dark.xml 在我的recycler视图适配器中,我根据索引在这两个

  • android L开发人员预览版中的标准列表视图选择器使用颜色控制亮点用于触摸的涟漪效果,并且在不聚焦状态下具有透明背景。 我想定义一个项目,它有一个彩色背景,并且仍然用相同的高亮颜色显示触摸时的涟漪效果。现在,如果我定义以下可绘制图形: 它起作用,但是纹波在 ListVIEW 项中间开始,不管触摸位置如何。如果我在 之外使用相同的背景,例如,对于 ,其工作原理与预期相同(纹波从触摸位置开始)。

  • 好的,所以我知道涟漪效应是唯一可用的Lollipop和以上。但是,当设置ImageButton时,我仍然无法获得像“常规”按钮一样的涟漪效果,只显示一个图像(和透明bg)。。。 我添加了AppCompat v7,并将第二个布局放在我的drawable/layout-v21文件夹中,该文件夹中有以下按钮: 但背景是灰色的,纹波(也是灰色的)无法定制。 所以,如果我只需要一个很好的ripple dra

  • 第一次在这里问问题,让我们看看... 我在以编程方式在CardView上设置涟漪效应时遇到了麻烦。(但我希望找到一种基本适用于任何视图的方法)问题是,我的卡片是这样编程制作的: 现在,正如您所看到的,我使用前景属性进行了尝试,基于在这里可以找到的类似问题的答案。 **更新:**卡片在Android 5之前的代码中变得不可见。

  • 我想在我的应用程序中使用水波涟漪效果,这种效果会在触摸区域反复出现,我已经访问了站点中可用的示例代码,但涟漪似乎被像素化了。 谁能帮我,实现活水涟漪效应?。我发现很难实施它。