35

ich auf meinem Navigationsleiste eine sich allmählich ausbreitende Wirkung verwende. Ich habe es so eingestellt und wandte sie auf meine Listview:Android Ripple Hintergrund Farbe

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" android:drawable="@color/black_200" /> 

    <item android:state_pressed="true" android:color="@color/black_200"> 
     <ripple android:color="@color/black_400" /> 
    </item> 

    <item android:drawable="@color/white" /> 
</selector> 

ich den Ripple Hintergrund die gleichen wie bei dem normalen aktivierten Zustand bleiben will. Selbst wenn ich die Farbe als den aktivierten Zustand definiere, wird sie dunkler und die Welligkeitsblase wird noch dunkler. Wie kann ich den Hintergrund so einfärben, dass er wie der aktivierte Zustand ist und die Welligkeits-Blase die Farbe ist, die ich ihm gesagt habe?

Antwort

41

Sie können die Farbe des RippleDrawable steuern, indem Sie folgendermaßen vorgehen:

RippleDrawable rippleDrawable = (RippleDrawable)view.getBackground(); // assumes bg is a RippleDrawable 

int[][] states = new int[][] { new int[] { android.R.attr.state_enabled} }; 
int[] colors = new int[] { Color.BLUE }; // sets the ripple color to blue 

ColorStateList colorStateList = new ColorStateList(states, colors); 
rippleDrawable.setColor(colorStateList); 

Oder über XML:

<?xml version="1.0" encoding="utf-8"?> 
<ripple 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#FFFF0000"> <!-- The ripple will be red --> 

    <!-- the normal bg color will be light grey --> 
    <item> 
     <color android:color="#FFDDDDDD" /> 
    </item> 

    <!-- make sure the ripple doesn't exceed the bounds --> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="?android:colorAccent" /> 
     </shape> 
    </item> 
</ripple> 

EDIT

Nachdem ich die Antwort von @ i.shadrin Unten muss ich zugeben, dass es ein viel einfacherer Ansatz ist (mit Stilen). Wenn dies eine Option für Sie ist, würde ich es empfehlen.

+0

Ist das auch in XML möglich? – qwertz

+0

Ja, habe meine Antwort bearbeitet. –

+0

Danke. Wie würde ich diese Welligkeit von meinem bereits vorhandenen Selektor beziehen? – qwertz

57

Es ist viel einfacher, mit Stilen zu tun:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    ... 
    <item name="colorControlHighlight">@color/ripple_material_dark</item> 
    ... 
</style> 
+7

Wie das Plakat der Antwort akzeptiert, ich wählen Sie diese auch in 'Xamarin.Android' die akzeptierte Antwort –

+0

wirkt wie ein Zauber werden, _no Überraschung natürlich! _ –

9

diese beiden Codezeilen innerhalb Ihrer Ansicht hinzufügen Ripple-Effekt.

android:clickable="true" 
android:background="?attr/selectableItemBackground" 
+1

Hat mit schwarzen (oder sehr dunkel) Hintergrund nicht. –

1

Ein Beispiel Welligkeit mit einem Wähler auf api lvl 21 und über

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="?attr/colorControlHighlight"> 

    <!-- ripple mask --> 
    <item android:id="@+id/mask"> 
     <color android:color="@android:color/white"/> 
    </item> 

    <!-- background shape or color --> 
    <item android:drawable="@drawable/rectangle_rounded_steel_blue"/> 

</ripple> 
2

verwenden Wenn Sie die benutzerdefinierte Schaltfläche Farbe dann für Kräuselungeffekt Code unten verwenden verwenden. Speichern Sie die Datei in ziehbar mit Namen my_ripple.xml und im Hintergrund der Schaltfläche.

Verwandte Themen