2015-04-04 5 views
21

Sto usando la seguente forma nella mia appRipples su una forma con uno sfondo trasparente

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
     <shape android:shape="oval" > 
      <solid android:color="@color/primary_light"/> 
      <size android:height="80dp" android:width="80dp"/> 
     </shape> 
    </item> 

    <item android:state_focused="true"> 
     <shape android:shape="oval"> 
      <stroke android:color="@color/primary_light" android:width="5dp"/> 
      <size android:height="80dp" android:width="80dp"/> 
     </shape> 
    </item> 

    <item> 
     <shape android:shape="oval"> 
      <solid android:color="@android:color/transparent"/> 
      <size android:height="80dp" android:width="80dp"/> 
     </shape> 
    </item> 
</selector> 

È lì nella mia cartella drawable. Ora sto aggiornando la mia app su Lollipop e desidero dare un feedback a catena sul pulsante circolare che ho usato. Così nella cartella drawable-v21 ho cambiato in un selettore ripple:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="@color/primary_light"> 
    <item> 
     <selector> 
      <item android:state_focused="true"> 
       <shape android:shape="oval"> 
        <stroke android:color="@color/primary_light" android:width="5dp"/> 
        <size android:height="80dp" android:width="80dp"/> 
       </shape> 
      </item> 

      <item android:id="@android:id/mask"> 
       <shape android:shape="oval"> 
        <solid android:color="@android:color/transparent"/> 
        <size android:height="80dp" android:width="80dp"/> 
       </shape> 
      </item> 
     </selector> 
    </item> 
</ripple> 

Ma purtroppo l'effetto a catena non viene generata utilizzando il drawable sopra Lollipop. È a causa del <solid android:color="@android:color/transparent"/>?

Qualcuno può mostrarmi dove ho sbagliato? Grazie

+0

avuto lo stesso problema con ' 'usato come una maschera in un'increspatura. Non sembra prendere in considerazione la forma dell'oggetto interno se è trasparente. \ n La tua soluzione utilizza '@android: color/white' invece di' transparent' e questo è quello che fa funzionare davvero, credo. – John

risposta

44

Dopo alcuni tentativi ed errori, sembra di aver frainteso la gerarchia di selector e item.

Quanto segue funziona perfettamente.

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="@color/primary_light"> 
     <item android:id="@android:id/mask"> 
       <shape android:shape="oval"> 
         <solid android:color="@android:color/white"/> 
         <size android:height="80dp" android:width="80dp"/> 
       </shape> 
     </item> 
</ripple> 
+3

grazie per aver risposto alla tua domanda – defhlt

+2

Questo non è con uno sfondo trasparente .. Sei riuscito a impostare ripple con uno sfondo trasparente pure? –

+2

@anoniim Funziona per sfondo trasparente http://stackoverflow.com/questions/30215663/ripple-effect-in-pressed-state-transparency-in-normal-state/35906753#35906753 – thuongle

7

Questo funziona con uno sfondo trasparente:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="?android:colorControlHighlight" 
    android:exitFadeDuration="@android:integer/config_shortAnimTime"> 
<!-- Use this to define the shape of the ripple effect (rectangle, oval, ring or line). The color specified here isn't used anyway --> 
<item android:id="@android:id/mask"> 
    <shape android:shape="rectangle"> 
     <corners android:radius="3dp"/> 
     <!-- This color is needed to be set - doesn't affect anything --> 
     <solid android:color="@android:color/white"/> 
    </shape> 
</item> 
<!-- This is the background for your button --> 
<item> 
    <!-- Use the shape you want here --> 
    <shape android:shape="rectangle"> 
     <!-- Use the solid tag to define the background color you want --> 
     <solid android:color="@android:color/transparent"/> 
    </shape> 
</item> 
</ripple> 

Questo è stato modificato un po 'da questa risposta: Transparent ripple

+0

Questo è quello che sto cercando. Grazie per questa risposta – AndEngine

1

Seguendo codice funziona per forma personalizzata con effetto a catena per il pulsante trasparente -

main_activity_buttons_ripple_with_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:color="#888888" 
    tools:targetApi="lollipop"> 

    <!-- Use this to define the shape of the ripple effect (rectangle, oval, ring or line). The color specified here isn't used anyway --> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <corners android:radius="25dp" /> 
      <!-- This color is needed to be set - doesn't affect anything --> 
      <solid android:color="#000" /> 
     </shape> 
    </item> 

    <!-- This is the background for your button --> 
    <item> 
     <!-- Use the shape you want here --> 
     <shape android:shape="rectangle"> 
      <!-- Use the solid tag to define the background color you want --> 
      <solid android:color="@android:color/transparent" /> 
      <stroke 
       android:width="1dp" 
       android:color="#FFF" /> 
      <corners android:radius="25dp" /> 
     </shape> 
    </item> 

</ripple> 

styles.xml

<style name="MainActivityButtonsStyle"> 
<item name="android:background">@drawable/main_activity_buttons_ripple_with_background</item> 
<item name="android:textAllCaps">false</item> 
<item name="android:layout_margin">15dp</item> 
<item name="android:paddingLeft">20dp</item> 
<item name="android:paddingRight">20dp</item> 
<item name="android:layout_centerHorizontal">true</item> 
<item name="android:layout_width">wrap_content</item> 
<item name="android:layout_height">50dp</item> 
<item name="android:textColor">#FFF</item> 
<item name="android:textSize">18sp</item> 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

     <Button 
      android:layout_alignParentTop="true" 
      style="@style/MainActivityButtonsStyle" 
      android:text="@string/button_search_by_id" /> 

    </RelativeLayout> 

</LinearLayout>