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

时间:2015-11-02 11:54:52

标签: android android-imageview textview material-design

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

16 个答案:

答案 0 :(得分:225)

参考: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"
/>

答案 1 :(得分:62)

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

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

(我觉得它看起来更好)

答案 2 :(得分:8)

有关波纹效应,请参阅以下答案。

在Textview或view上显示波纹:

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

按钮或Imageview上的波纹:

android:foreground="?android:attr/selectableItemBackgroundBorderless"

答案 3 :(得分:7)

您可以使用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();

答案 4 :(得分:5)

<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" />

试试这个。

答案 5 :(得分:5)

添加 android:clickable="true" android:focusable="true"

纹波效果

android:background="?attr/selectableItemBackgroundBorderless"

对于可选效果

android:background="?android:attr/selectableItemBackground"

对于按钮效果

android:adjustViewBounds="true" style="?android:attr/borderlessButtonStyle"

答案 6 :(得分:4)

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

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

答案 7 :(得分:4)

试试这个。 这对我有用。

android:clickable="true"
    android:focusable="true"
    android:background="?android:attr/selectableItemBackground"

答案 8 :(得分:4)

对于圆形波纹: android:background="?attr/selectableItemBackgroundBorderless"

对于矩形波纹: android:background="?attr/selectableItemBackground"

答案 9 :(得分:3)

如果由@Bikesh M Annur({{3}})发布的投票良好的解决方案对您不起作用,请尝试使用:

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

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

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

声明可点击但未声明为可聚焦的窗口小部件无法通过键盘访问。

答案 10 :(得分:2)

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

答案 11 :(得分:2)

android:background="?android:selectableItemBackground"
android:focusable="true"
android:clickable="true"

答案 12 :(得分:1)

或者您可以尝试使用此库(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>

答案 13 :(得分:1)

如果上述解决方案不适用于您的TextView,则肯定可以使用:

1。添加此样式

<style name="ClickableView">
    <item name="colorControlHighlight">@android:color/white</item>
    <item name="android:background">?selectableItemBackground</item>
</style>

2。

即可使用
android:theme="@style/ClickableView"

答案 14 :(得分:0)

最佳添加方式:

    <ImageView
        android:id="@+id/ivBack"
        style="?attr/actionButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:src="@drawable/ic_back_arrow_black"
        android:tint="@color/white" />

答案 15 :(得分:-2)

最好的方法是使用库。 This就是其中之一。只需添加其依赖项,并在每个需要涟漪效应的元素之前将代码放在xml中:

<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">