如何仅在 TableRow 项目的图像按钮上设置波纹效果 android

How to set ripple effect only on image button of TableRow item android

我想在图像按钮上添加自定义波纹效果。但是如果我改变背景,它会在图像后面显示颜色效果。另外,我设置了 table-row 和 image-button wrap content 但仍然找不到解决方案。 请帮我只在图像按钮上设置波纹效果,而不是在 space.

之外
<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="0.5"
    android:gravity="center_horizontal"
    android:layout_gravity="center_horizontal"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    >

    <ImageButton
        android:id="@+id/ess_btn_leave"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.5"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:src="@drawable/leave"
        android:background="?android:attr/selectableItemBackground"
        />

    <ImageButton
        android:id="@+id/ess_imgbtn_expence"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.5"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:background="@null"
        android:src="@drawable/expence"
        />
</TableRow>

将此 .xml 添加到您的可绘制文件夹

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:drawable="@drawable/button_normal" />
</ripple>

并将其用作 imageButton 的背景以获得涟漪效果。

来自https://developer.android.com/training/material/animations.html

尝试

<ImageView
.
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>

试试这个方法

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/ic_button"
    android:background="?attr/selectableItemBackgroundBorderless"
/>

试试这个解决方案:-

xml 的父布局中添加以下行:-

android:descendantFocusability="blocksDescendants"

在ImageButton中设置-

android:background="@drawable/grid_ripple_effect"

grid_ripple_effect.xml in that change color as per your need.

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="@color/light_green"
    tools:targetApi="lollipop">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle" android:left="-2dp"  android:right="-2dp" android:top="-2dp">
            <stroke android:width="1dip" android:color="#CABBBBBB" />
            <corners android:radius="2dp" />
            <solid android:color="@color/light_green" />
        </shape>
    </item>
</ripple>

你可以使用 android:foreground="?attr/selectableItemBackground" 在您的图像视图上。 默认纹波

对于自定义波纹,您需要创建两个文件 在您的 drawable-v21 中创建一个文件 - background_ripple.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_shortAnimTime"
android:color="@color/lightGrey" >

<item>
    <shape android:shape="rectangle" >
        <solid android:color="@color/white" />
    </shape>
</item>

在 21 以上版本的正常绘图中

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <color android:color="@color/lightGrey" />
    </item>
    <item>
        <color android:color="@color/white" />
    </item>
</selector>

并在图像视图上执行 android:foreground="@drawable/background_ripple.xml