ImageView selectableItemBackgroundBorderless 不会在视图边界之外呈现

Posted

技术标签:

【中文标题】ImageView selectableItemBackgroundBorderless 不会在视图边界之外呈现【英文标题】:ImageView selectableItemBackgroundBorderless does not render outside of view bounds 【发布时间】:2018-05-10 17:31:42 【问题描述】:

我正在使用selectableItemBackgroundBorderlessImageView 添加波纹。 我的预期行为是产生圆形波纹,扩大视图大小。不幸的是,波纹被视图边界裁剪了。 如何解决这个问题?

默认状态:

按下状态:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/nav_instruction_container"
    android:layout_
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@drawable/nav_gradient_bg"
    android:padding="20dp">
    <ImageView
        android:id="@+id/nav_sign"
        android:layout_
        android:layout_
        android:layout_centerVertical="true"
        android:scaleType="centerInside"
        android:adjustViewBounds="true"
        />

    <TextView
        android:id="@+id/title"
        android:layout_
        android:layout_
        android:layout_toRightOf="@+id/nav_sign"
        android:layout_marginLeft="24dp"
        android:layout_marginStart="24dp"
        android:layout_marginRight="24dp"
        android:layout_marginEnd="24dp"
        android:textColor="@color/white"
        android:textSize="24sp"
        android:textStyle="bold"
        android:maxLines="2"
        tools:text="A644 Shudehill asdfkjasdf asdfasdf asdfsss"
        android:ellipsize="marquee"
        />

    <TextView
        android:id="@+id/subTitle"
        android:layout_
        android:layout_
        android:layout_below="@+id/title"
        android:layout_toRightOf="@+id/nav_sign"
        android:layout_marginLeft="24dp"
        android:layout_marginStart="24dp"
        android:layout_marginRight="24dp"
        android:layout_marginEnd="24dp"
        android:textColor="@color/white"
        android:textSize="17sp"
        tools:text="via Church St"
        />

    <ImageView
        android:layout_
        android:layout_
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        app:srcCompat="@drawable/ic_nav_queue_sheet_icon_light"
        android:id="@+id/nav_queue"
        android:scaleType="centerInside"
        android:foreground="?attr/selectableItemBackgroundBorderless"
        android:adjustViewBounds="true"/>
</RelativeLayout>

【问题讨论】:

如果没有将 clickable 属性设置为 xml 中的 ImageView,您是如何获得“按下状态”的? AFAIK 如果附加点击监听器,则不需要 clickable 属性 你能解决这个问题吗 【参考方案1】:

如果您有一个可点击的ImageView,那么它很可能应该是一个ImageButton

已经定义了ImageButton:

<ImageButton
    android:layout_
    android:layout_
    android:background="?attr/selectableItemBackgroundBorderless"
    app:srcCompat="@drawable/ic_navigation_black_24dp" />

然后你会得到以下输出:

如果你想要更大的涟漪效果,你必须改变视图的大小:而不是wrap_content,比如说,100dp:

【讨论】:

你可以为你的视图添加背景颜色(这样我可以看到它的边界)并将波纹用作前景吗? 为此我打开了“显示布局边界”开发者选项。您在 gif 中看到的正方形是视图的边界。【参考方案2】:

在drawable中定义ripple_effect_circle.xml

<?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="#BDBDBD"
    >

    <item android:id="@android:id/mask">
        <shape android:shape="oval">
            <size
                android:
                android:/>
            <solid android:color="#BDBDBD" />
        </shape>
    </item>

</ripple>

在布局中定义ImageView

    <ImageView
            android:layout_
            android:layout_
            android:layout_margin="60dp"
            android:src="@drawable/ripple_effect_circle"
            android:background="@drawable/your_round_image"
            />

【讨论】:

【参考方案3】:

只需从使用ImageView 的前景更改为背景android:background="?selectableItemBackgroundBorderless"。然后您应该会在视图边界之外看到波纹渲染。

【讨论】:

【参考方案4】:

您可以使用库 https://github.com/hdodenhof/CircleImageView 来解决此问题。

使用上面的库创建圆形 Imageview,它会产生你所期望的涟漪效果。

【讨论】:

【参考方案5】:

一件事是您将ImageView 的高度限制为46dppadding 添加到ImageView 而不是父布局

【讨论】:

【参考方案6】:

做layerlist drawable xml 使第一个项目形状为圆形 然后添加项目 selectableItemBackgroundBorderless 它会正常工作

【讨论】:

以上是关于ImageView selectableItemBackgroundBorderless 不会在视图边界之外呈现的主要内容,如果未能解决你的问题,请参考以下文章

android 自定义控件(带有删除按钮的imageview) 怎么在ImageView背景上添加button按钮 动态添加imageview 自带删除图标的imageview list删除某

如何动态的设定imageview的大小

如何将imageview内的图像移动到imageView的上端?

Android 怎么把imageview 转为Bitmap

以另一个 ImageView 的形状裁剪 ImageView

[??????]????????????????????????????????????,????????????ImageView???