我想在Android Studio中对textview和imageview设置涟漪效果。我该怎么办?
答案 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">