2014-11-20 9 views
6

è possibile creare un RippleDrawable che definisce un'ondulazione illimitata e allo stesso tempo un colore di sfondo? Ho provato tutto ma quando definisco una forma e il suo colore l'ondulazione non è più illimitata. Anche in questa pagina https://developer.android.com/reference/android/graphics/drawable/RippleDrawable.html non è presente alcun riferimento sull'aggiunta di un'increspatura illimitata su una forma.Ondulazione e sfondo illimitati Android

Ho provato con questo strato-lista, ma il risultato è terribile

<layer-list 
     xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <ripple 
     android:color="@color/android_l_light_gray"> 
    </ripple> 
</item> 

<item>  
    <shape 
     android:shape="rectangle"> 
     <solid android:color="@color/android_l_dark_gray" /> 
    </shape>  
</item> </layer-list> 

questo è ciò che ottengo enter image description here

+0

Controlla selezionabileItemBackgroundBorderless – IuriiO

+0

vuoi dire dovrei aggiungere questo 'style ="? Android: attr/borderlessButtonStyle "' al pulsante xml? Se sì, non funziona :( – pier

+0

il suo non è uno stile, ma di fondo: Android: background = "android:? attr/selectableItemBackgroundBorderless" – IuriiO

risposta

18

Prima di tutto tenere presente che layer-list opere disegnabili simile a FrameLayout, impila item s come appaiono quindi se si desidera avere il ripple di fronte basta spostare verso il basso

<?xml version="1.0" encoding="utf-8"?> 
<layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
    <shape 
     android:shape="rectangle"> 
     <solid android:color="@color/android_l_dark_gray"/> 
    </shape> 
    </item> 
    <item> 
    <ripple android:color="@color/android_l_light_gray"/> 
    </item> 
</layer-list> 

produce qualcosa come

layer list ripple on top

Ora si nota come viene "ritagliato" da altri tasti? in realtà viene sovrascritto, a causa dell'ordine di pareggio, lo sfondo delle altre visualizzazioni viene disegnato in primo piano, non che il ripple viene effettivamente ridotto, quindi posso pensare a qualche soluzione per il layout particolare:

a . Sbarazzarsi del layer-list drawable e utilizzare solo ripple come sfondo del pulsante, utilizzare il shape o color drawable come ViewGroup sfondo, producendo:

ripple only

noti che hai perso la griglia come effetto dovuto l'altra sfondo, ma date un'occhiata ad altri pad numerici sul lecca-lecca e noterete che non hanno divisori di griglia, se volete comunque usarli il vostro ViewGroup per disegnarli.

b. Usa/disegna il ripple come primo piano/overlay/drawableTop drawable e l'altro come sfondo, ma penso che potresti imbatterti in un problema simile con l'ordine di disegno come prima.

c. Ha avuto un altro in mente, ma ho solo dimenticato, potrebbe tornare come un sogno ¯ \ _ (ツ) _/¯

Partenza Calculator from AOSP, si potrebbe desiderare di prendere in prestito CalculatorPadLayout per la griglia, o semplicemente imparare come lo fanno :)

+0

ciao, grazie :) Ho già controllato il calcolatore AOSP. Raggiungono questo risultato includendo due file xml diversi in cui il primo ha lo sfondo grigio scuro e il secondo ha il grigio chiaro .. in entrambi i pulsanti è presente lo sfondo standard di ripple. Sembra che questo sia l'unico modo per avere un'increspatura illimitata e uno sfondo verticale a strisce – pier