RippleDrawable

在 Android 5.0(API 級別 21)中使用材質設計引入了波紋觸控效果,並且動畫由新的 RippleDrawable 類實現。

Drawable 顯示響應狀態變化的連鎖反應。可以通過使用相應的狀態屬性識別符號呼叫 setHotspot(float x, float y) 來指定給定狀態的紋波的錨定位置。

Version >= 5

通常,常規按鈕的漣漪效果預設在 API 21 及更高版本中有效,對於其他可觸控檢視,可以通過指定:

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

對於檢視中包含的漣漪或:

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

對於超出檢視範圍的漣漪。

例如,在下圖中,

  • B1 是一個沒有任何背景的按鈕,
  • B2 設定為 android:background="android:attr/selectableItemBackground"
  • B3 與 android:background="android:attr/selectableItemBackgroundBorderless" 一起設定

(圖片提供: http//blog.csdn.net/a396901990/article/details/40187203

你可以使用以下程式碼實現相同的功能:

int[] attrs = new int[]{R.attr.selectableItemBackground};
TypedArray typedArray = getActivity().obtainStyledAttributes(attrs);
int backgroundResource = typedArray.getResourceId(0, 0);
myView.setBackgroundResource(backgroundResource);

也可以使用 android:foreground 屬性以與上面相同的方式將漣漪新增到檢視中。顧名思義,如果將紋波新增到前景,則紋波將顯示在新增到其上的任何檢視的上方(例如,ImageView,包含多個檢視的 LinearLayout 等)。

如果要將漣漪效果自定義到檢視中,則需要在 drawable 目錄中建立新的 XML 檔案。

以下是一些例子:

例 1 :無界波紋

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ffff0000" />

示例 2 :具有蒙版和背景顏色的波紋

<ripple android:color="#7777777"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/mask"
        android:drawable="#ffff00" />
    <item android:drawable="@android:color/white"/>
</ripple>

如果 view 的背景已經指定shapecorners 和任何其他標籤,要為該檢視新增紋波,請使用 mask layer 並將紋波設定為檢視的背景。

示例

 <?xml version="1.0" encoding="utf-8"?>
    <ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?android:attr/colorControlHighlight">
        <item android:id="@android:id/mask">
           <shape 
              android:shape="rectangle">
              solid android:color="#000000"/>
               <corners
                 android:radius="25dp"/>
            </shape>
        </item>
        <item android:drawable="@drawable/rounded_corners" />
    </ripple>

示例 3 :可繪製資源頂部的波紋

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ff0000ff">
    <item android:drawable="@drawable/my_drawable" />
</ripple>

用法: 要將 ripple xml 檔案附加到任何檢視,請將其設定為背景,如下所示(假設你的 ripple 檔名為 my_ripple.xml):

<View 
    android:id="@+id/myViewId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_ripple" />

選擇:

如果你的目標版本是 v21 或更高版本(也可以將紋波選擇器放在 drawable-v21 資料夾中),也可以使用紋波 drawable 代替顏色狀態列表選擇器:

<!-- /drawable/button.xml: -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/button_pressed"/>
    <item android:drawable="@drawable/button_normal"/>
</selector>

<!--/drawable-v21/button.xml:-->
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
   <item android:drawable="@drawable/button_normal" />
</ripple>

在這種情況下,檢視的預設狀態的顏色將為白色,按下的狀態將顯示可繪製的波紋。

注意: 使用 ?android:colorControlHighlight 會使漣漪與應用中的內建漣漪顏色相同。

要僅改變波紋顏色,你可以在主題中自定義顏色 android:colorControlHighlight,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>

  <style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
    <item name="android:colorControlHighlight">@color/your_custom_color</item>
  </style>

</resources>

然後在你的活動等中使用這個主題。效果如下圖所示:

(圖片提供: http//blog.csdn.net/a396901990/article/details/40187203