如何在Android上的textview或imageview上设置涟漪效果?

我想在Android Studio中对textview和imageview设置涟漪效果。 我该怎么做?

11个解决方案
217 votes

参考:[http://developer.android.com/training/material/animations.html,]

[http://wiki.workassis.com/category/android/android-xml/]

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

<ImageView
.
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>
Bikesh M answered 2019-08-13T12:09:51Z
59 votes

如果您希望将纹波限制为TextView / ImageView的大小,请使用:

<TextView
android:background="?attr/selectableItemBackground"
android:clickable="true"/>

(我觉得它看起来更好)

Micro answered 2019-08-13T12:10:23Z
7 votes

你可以使用android-ripple-background

开始效果

final RippleBackground rippleBackground=(RippleBackground)findViewById(R.id.content);
ImageView imageView=(ImageView)findViewById(R.id.centerImage);
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        rippleBackground.startRippleAnimation();
    }
});

停止动画:

rippleBackground.stopRippleAnimation();
IntelliJ Amiya answered 2019-08-13T12:11:02Z
7 votes

有关涟漪效应请参考以下答案。

Textview或视图上的波纹:

android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackgroundBorderless"

按钮或Imageview上的波纹:

android:foreground="?android:attr/selectableItemBackgroundBorderless"
Vasant answered 2019-08-13T12:11:41Z
5 votes
<TextView
            android:id="@+id/txt_banner"
            android:layout_width="match_parent"
            android:text="@string/banner"
            android:gravity="center|left"
            android:layout_below="@+id/title"
            android:background="@drawable/ripple_effect"
            android:paddingLeft="15dp"
            android:textSize="15sp"
            android:layout_height="45dp" />

将此添加到drawable中

<?xml version="1.0" encoding="utf-8"?>
<!--this ribble animation only working for >= android version 21-->
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/click_efect" />

试试这个。

Karthik Sridharan answered 2019-08-13T12:12:09Z
4 votes

除了以上答案之外,还可以增加焦点以避免UI编辑器的警告

android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
Zafer Celaloglu answered 2019-08-13T12:12:33Z
4 votes

试试这个。这对我有用。

android:clickable="true"
    android:focusable="true"
    android:background="?android:attr/selectableItemBackground"
Juboraj Sarker answered 2019-08-13T12:12:57Z
3 votes

如果@Bikesh M Annur(这里)发布的评选良好的解决方案对您不起作用,请尝试使用:

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

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

另外,使用android:clickable="true"时添加android:focusable="true"因为:

&#34;声明可点击但未声明可聚焦的小部件无法通过键盘访问。&#34;

Filipe de Lima Brito answered 2019-08-13T12:13:40Z
2 votes

除了@Bikesh M Annur的回答,请务必更新您的支持库。 以前我使用的是23.1.1,没有任何反应。 将其更新到23.3.0就可以了。

Mark Pazon answered 2019-08-13T12:14:06Z
1 votes

或者你可以尝试使用这个库(android 9+):RippleEffect

积分

dependencies {
    compile 'com.github.traex.rippleeffect:library:1.3'
}

用法:

<com.andexert.library.RippleView
  android:id="@+id/more"
  android:layout_width="?android:actionBarSize"
  android:layout_height="?android:actionBarSize"
  android:layout_toLeftOf="@+id/more2"
  android:layout_margin="5dp"
  rv_centered="true">

  <ImageView
    android:layout_width="?android:actionBarSize"
    android:layout_height="?android:actionBarSize"
    android:src="@android:drawable/ic_menu_edit"
    android:layout_centerInParent="true"
    android:padding="10dp"
    android:background="@android:color/holo_blue_dark"/>

</com.andexert.library.RippleView>
walkmn answered 2019-08-13T12:14:40Z
-1 votes

最好的方法是使用库。 这是其中之一。 只需添加其依赖项并在每个需要连锁效果的元素之前将代码放在xml中:

<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">
Amirhossein Naghshzan answered 2019-08-13T12:15:05Z
translate from https://stackoverflow.com:/questions/33477025/how-to-set-a-ripple-effect-on-textview-or-imageview-on-android