這是我這個系列的目錄玉雾,有興趣的可以看下: android 動畫系列 - 目錄
說波紋是動畫其實是有點勉強的翔试,應該叫波紋觸摸反饋。廢話不多說抹凳,先看看效果圖遏餐,再細說:
看著熟悉吧,一般人很少有提到 ripple 的赢底,我也是偶然才看到這方面的資料的失都。ripple 是在5.0版本才提供的交互效果柏蘑,本意是優(yōu)化 android 體驗,以抗衡IOS粹庞】确伲看到5.0本能的就會想到兼容問題,經過測試很遺憾庞溜,4.X 版本跑不了革半,ripple 是用 xml 定義的,在4.X 版本上無法解析 ripple 這個 xml 標簽流码。
ripple 的類是 RippleDrawable又官,父類是 LayerDrawable,可見google 是使用多層層疊 drawable 來實現的這個波紋效果漫试,點擊時會有應該的操作六敬,平時不顯示,只顯示我們的底色驾荣。
好了外构,來看看 ripple 的用法把,ripple 是一張 drawable 圖片播掷,作為背景色使用审编,系統(tǒng)提供了2種默認實現:
- selectableItemBackground:波紋被限制在控件的邊界中
- selectableItemBackgroundBorderless:波紋會呈圓形發(fā)散出去,不會被限制
<TextView
android:id="@+id/view_test"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
android:layout_marginTop="100dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:gravity="center"
android:text="測試"/>
波紋被限制在控件的邊界中:
波紋會呈圓形發(fā)散出去歧匈,不會被限制:
特意把控件設置成矩形垒酬,可以看到ripple 的圓形是以控件的對角線為直徑的
系統(tǒng)提供的改不了顏色,所以我們來看看如何自定義:
ripple 既然是一個 drawable件炉,那么我們就是可以使用 xml 來自定義的伤溉,所有的 drawable 都可以使用 xml 來自定義
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/mask" android:drawable="@color/colorAccent"></item>
<item android:drawable="@android:color/darker_gray"></item>
</ripple>
解釋下,item 表示我們設置幾張圖片進去妻率,當然也可以直接使用顏色,帶 android:id="@android:id/mask" 的 item 表示 設置ripple 波紋圖層的圖片板祝,ripple效果=限制在控件的邊界中宫静,不帶 id 的 item 表示默認背景圖片
效果圖:
要是想用波紋散發(fā)出view 的效果:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorAccent" >
</ripple>
在 ripple 跟標簽里設置顏色就可以,但這樣我們要是再添加item的話券时,item 是不會再顯示出來的孤里,我試過就是這樣的,可能是 google 做的不就是很到位
效果圖:
還有一種寫法橘洞,沒驗證過
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#6da7ff">
<item>
<shape>
<!--點擊后的顏色-->
<solid android:color="#ff1c1c"/>
<!--設置角度-->
<corners android:radius="10dp"/>
</shape>
</item>
</ripple>
ps:ripple 就這么多了捌袜,用起來挺簡單,但是注意不兼容4.X版本炸枣,害的麻煩寫兼容的 drawable 文件夾