Android 為控制項添加點擊漣漪效果

來源:互聯網
上載者:User

標籤:安卓   版本   span   rip   rectangle   shape   背景圖片   XML   原因   

      Android在5.0版為Button預設添加了點擊時的漣漪效果,而且在其他的控制項上也可以輕鬆的實現這種炫酷的效果。漣漪效果可以分為兩種,一種時有邊界的漣漪,另一種時無邊界的漣漪。所謂的有邊界,即漣漪的效果展現不會超過控制項的大小;另一種無邊界效果,漣漪在越過控制項邊界之後還會繼續擴散,然後逐漸消失。

實現漣漪效果,我們只需要在控制項的android:backgroud 屬性上進行設定即可。兩種效果的設定如下 :

有邊界的漣漪效果:

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

無邊界的漣漪效果:

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

除了進行上面的設定之外,還要記得設定控制項為可點擊的

android:clickable="true"

     

       如果控制項已經使用了android:background屬性去設定背景色或者背景圖片,但是有想要有點擊時的漣漪效果。那麼我們可以考慮在android:foreground屬性中設定漣漪效果,這樣同樣可以達到點擊時產生漣漪,也不會影響我們對控制項背景的設定。不過對於預設無法點擊的控制項,還要記得設定android:clickable為true。另外還要注意,如果Android版本過低,無邊界的漣漪效果可能無法很好的展現。

 

除了使用上述方法設定漣漪效果外,我們也可以考慮自訂漣漪效果,比如自訂漣漪的顏色,自訂漣漪的邊界等,使UI的展現更加豐富。

想要自訂漣漪效果,就要使用到Ripple。我們可以在xml中使用ripple標籤來設定漣漪的效果 :

1)自訂漣漪的顏色:

建立xml檔案custom_bg.xml,內容如下:

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

這裡指定了漣漪的顏色為 #000000,即黑色。使用該xml檔案作為背景後,當點擊控制項時,漣漪的顏色就會變為黑色。

也就是說,我們在ripple標籤的color中指定的顏色,就是漣漪的顏色。

 

2)自訂漣漪的邊界:

假設我們想要漣漪的邊界為一個橢圓,對上面的custom_bg.xml檔案進行修改,我們只需要在ripple標籤裡再添加一個item標籤,再在item標籤裡設定邊界的形狀(shape)大小即可。item裡的設定和我們平常為drawable設定形狀大小的操作類似:

<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#000000">    <item >        <shape android:shape="oval">            <solid android:color="#ffffff"/>        </shape>    </item></ripple>

在item標籤中指定了一個oval(橢圓),它的顏色為白色,大小不超過控制項(和控制項四邊相切)。當我們設定該xml為控制項背景後,控制項上面會顯示一個白色的橢圓,當我們點擊之後,會在橢圓上產生一個逐漸擴散的黑色漣漪,這個漣漪慢慢擴散消失,但不會超出橢圓的範圍。

雖然漣漪有邊界了,但這不是我們想要的效果,我們只希望為漣漪指定一個橢圓的邊界,但不希望這個白色的橢圓會顯示在控制項上。那麼如果我們去掉裡面的

<solid android:color="#ffffff"/>

這一行就可以了嗎?答案是不行的。當我們不為橢圓填充顏色之後,就沒有漣漪效果了。原因是如果不為橢圓設定顏色,那麼橢圓就預設沒有大小,這樣漣漪的顯示範圍就為零。想要只設定漣漪的邊界,而不影響控制項的顯示,可以為item標籤設定id為@android:id/mask 。如下:

<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#000000">    <item android:id="@android:id/mask">        <shape android:shape="oval">            <solid android:color="#ffffff"/>        </shape>    </item></ripple>

這樣設定之後,相當於設定了一個橢圓的遮罩,點擊控制項之後,漣漪擴散的邊界就是一個橢圓。

 

3)為漣漪設定更複雜的邊界

我們用shape為漣漪設定邊界形狀,只有rectangle,oval等幾個基本形狀。想要使漣漪的效果更加炫酷,可以使用圖片來作為漣漪的邊界,顯示時,圖片的不透明部分就是漣漪的可擴散地區。當我們點擊控制項時,可以清楚的顯示出圖片的輪廓,能得到更好的視覺效果。

修改custom_bg.xml檔案,如下:

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

我們設定漣漪的顏色為#000000(黑色),在item標籤中通過android:drawable指定了漣漪的邊界為ic_launcher這張圖片,即漣漪以該圖片的輪廓作為邊界,只會在該圖片不透明部分擴散。另外設定了android:id/mask,表示圖片只作為蒙版,不顯示出來。當我們點擊控制項時,可以看到一個炫酷的安卓的漣漪效果。

Android 為控制項添加點擊漣漪效果

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.