2014-11-17 66 views
9

我對如何正確使用可繪製波紋有點遺憾。創建沒有透明度的可繪製波紋

比方說,我有這樣的繪製:

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

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="false" android:state_focused="true" android:drawable="@color/accent_color_light" /> 
    <item android:state_pressed="true" android:drawable="@color/accent_color_light" /> 
    <item android:drawable="@android:color/white" /> 
</selector> 

所以這是一個純白色的背景,當它集中或壓制其變爲淡藍色。

如何獲得相同的顏色但帶有連鎖效應? 我想我需要使用一個遮罩來防止它超出視圖的範圍?

回答

21

忘了回答我自己的問題。

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

    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle" > 
      <solid android:color="@android:color/holo_green_light" /> 
     </shape> 
    </item> 

</ripple> 

沒有顯示ID爲「mask」的項目中的顏色。它用於說明連鎖效應的形狀和邊界。沒有它,它可能會超出視圖範圍。

+0

謝謝你!救了我在這裏 - > http://stackoverflow.com/questions/43531552/how-do-i-change-the-solid-color-of-a-ripple-drawable#autocomment74148081 – reidisaki

19

RippleDrawable已經是一個StateListDrawable(即selector) - 這樣你就可以只用一個波紋繪製作爲背景(用默認狀態) - 是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="@color/accent_color_light"> 
    <item android:id="@android:id/mask"> 
     <color android:color="@android:color/white" /> 
    </item> 
    <item android:drawable="@android:color/white" /> 
</ripple> 

掩膜片界定紋波(並且實際上是上面的片段,減去顏色並且最後的android:drawable設置了未按下的背景)是棒棒糖中使用的default list selector