2014-11-17 14 views
9

Sono un po 'perso su come utilizzare correttamente Ripple Drawable.Creare un ripple disegnabile senza trasparenza

Diciamo che ho questo drawable:

<?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> 

quindi è un semplice sfondo bianco che cambia ad una luce blu quando si è focalizzata o premuto.

Come posso ottenere gli stessi colori ma con un effetto a catena? Penso di aver bisogno di usare una maschera per impedirgli di uscire dai limiti della vista?

risposta

21

Ho dimenticato di rispondere alla mia stessa domanda.

<?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> 

Il colore nell'elemento con ID "maschera" non viene visualizzato. È usato per indicare la forma e i limiti dell'effetto a catena. Senza di esso, può andare oltre i limiti della vista.

+0

grazie uomo! salvami qui-> http://stackoverflow.com/questions/43531552/how-do-i-change-the-solid-color-of-a-ripple-drawable#autocomment74148081 – reidisaki

19

RippleDrawable è già un StateListDrawable (cioè selector) - in modo da poter semplicemente utilizzare un disegnabile ondulazione come sfondo (con uno stato predefinito) - qualcosa di simile:

<?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> 

il pezzo maschera delimita il ripple (e, in realtà, il frammento sopra, meno i colori e l'ultimo android:drawable che imposta lo sfondo non premuto) è il default list selector utilizzato nel lecca-lecca.