将Material Design触摸纹波应用到ImageButton?


95

我有一个imagebutton在单击时不会响应触摸动画,因为它是静态图像,与棒棒糖上的常规按钮不同,后者带有内置波纹效果。我想在图像上添加材质设计的波纹触摸效果,但似乎找不到实现它的方法。我可以在图像上设置彩色滤光片,但这不是波纹效果。我要尝试执行的一个示例是,当您将专辑封面图像保存在Google Play音乐中时,阴影波纹在图像上移动。

Answers:


259

为了获得更好的结果:

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

6
这是更好的答案-给予圆润的感觉以及波纹效果,谢谢。
ElliotM 2015年

3
这是否也适用于彩色绘画?对我而言,尽管应用了背景,但看不到触摸效果。我的主题是从Theme.AppCompat.Light.DarkActionBar扩展的,这可能是个问题吗?
显示名称

12
取而代之的是,背景使用它的前景作为所有工作正常的视图。
Gopi Cg

1
有没有人找到一种方法来更改背景颜色?更改BackgroundTint无效,并且将Foreground设置为“?attr / selectableItemBackgroundBorderless”会使按钮产生讨厌的填充。
西弗

1
如果您使用的是深色背景,则波纹可能不够明显。通过添加将其更改为浅色波纹android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"(适用于<API 21)。有关其他解决方案,请参见stackoverflow.com/q/28605031/599535
生命

28

您可以像这样向ImageButton添加背景:

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

2
使用android:foreground =“?attr / selectableItemBackgroundBorderless”
MFQ

@MFQ与?android:attr / selectableItemBackground
Killer

1
@killer selectableItemBackgroundBorderless =给出无限制的圆形波纹,就像单击工具栏上的图标一样,但是selectableItemBackground给出矩形波纹,如果您长时间单击实现此拉杆的图标,则可以看到区别
MFQ

6

我从i.shadrin(这里)和Nicolars(这里)。

他们的答案之间的区别是?attr/selectableItemBackgroundBorderless可以给您一个android.view.InflateException,因此?android:attr/selectableItemBackground解决方案是。

FWIW,我不知道为什么会发生异常,因为第一个答案在我所有的旧项目中都很好,但在我最近的项目中却没有(也许是因为应用主题= android:Theme.Material?)。

发生的一件奇怪的事情是,尽管显示了波纹效果,但它超出了ImageButton的范围,因此解决方案是:

  • 使用android:foreground="?android:attr/selectableItemBackgroundBorderless"代替android:background="?android:attr/selectableItemBackgroundBorderless"

希望对您有帮助。


3

如果您已经有背景并且不想更改,请使用前景;

<ImageButton
    android:layout_width="60dp"
    android:layout_height="match_parent"
    android:background="@drawable/preview_in_4k_background"
    android:src="@drawable/ic_full_screen_24px"
    android:layout_marginLeft="5dp"
    android:foreground="?attr/selectableItemBackgroundBorderless"
    android:layout_column="2"/>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.