如何将材质设计效果添加到android视图?

如何将材质设计效果添加到android视图?,android,material-design,Android,Material Design,我正在使用AppCompat主题为棒棒糖之前的版本提供材料主题。当我将图像资源设置为导航图标或工具栏中的菜单按钮时,单击它们会产生连锁反应(运动)。但是,当我尝试在工具栏中提供相同的图标时,它们的行为就像普通视图一样,单击时没有运动 涟漪是如何产生的?安卓系统能在我提供的所有绘图设备上产生涟漪吗?当我在ImageView中使用图像资源时,如何使涟漪出现?您只需在XML布局中设置图像的背景即可创建涟漪。android:background=“?android:attr/selectableItem

我正在使用AppCompat主题为棒棒糖之前的版本提供材料主题。当我将图像资源设置为导航图标或
工具栏中的菜单按钮时,单击它们会产生连锁反应(运动)。但是,当我尝试在工具栏中提供相同的图标时,它们的行为就像普通视图一样,单击时没有运动


涟漪是如何产生的?安卓系统能在我提供的所有绘图设备上产生涟漪吗?当我在
ImageView
中使用图像资源时,如何使涟漪出现?

您只需在XML布局中设置图像的背景即可创建涟漪。
android:background=“?android:attr/selectableItemBackground”
涟漪基本上是涟漪可唤醒类的一个实例。可以使用xml和标记创建涟漪。最简单的ripple drawable如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ripple 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight" />


您可以在这里找到更多信息:

您可以使用涟漪效应实现这一点

Android API 9+材料设计的涟漪效应实现

该库在Maven Central上提供,您可以在Gradle上找到

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

RippleView

在XML布局文件中声明一个RippleView,其中包含像ImageView之类的内容

  <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>
有关代码和更多信息,请参阅此链接:

有关更多设计:


波纹是这样产生的,但它们会扩散到一个矩形区域。菜单图标和导航图标中的涟漪覆盖一个圆形区域。我希望涟漪以圆圈结束。那看起来更好。我该怎么做。那么你的图像应该是圆形的。当我将它作为菜单图标提供时,同样的图像会产生一个覆盖圆形的波纹。但是当我给selectableItemBackground的background属性赋值时,涟漪覆盖了一个矩形区域。因此,它与图像的形状无关。在内部,他们可以在图像视图中使用着色器以圆形格式显示它们。@Kartheen:那么当按钮已经设置了背景时,情况会怎样呢。说一个红色的背景。那我怎么才能给它添加涟漪效应呢。由于我们不能提供多个背景属性,我认为支持库不支持Ripple。
 rippleView.setOnRippleCompleteListener(new  RippleView.OnRippleCompleteListener() {

   @Override
   public void onComplete(RippleView rippleView) {
       Log.d("Sample", "Ripple completed");
   }

 });