android android-activity android-listview navigation-drawer rippledrawable

Color de fondo ondulado de Android



android-activity android-listview (5)

Estoy usando un efecto dominó en mi cajón de navegación. Lo configuré así y lo apliqué a mi ListView:

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

Quiero que el fondo de onda permanezca igual que el estado activado normal. Incluso cuando defino que el color sea el mismo que el estado activado, se vuelve más oscuro y la burbuja de ondas se vuelve aún más oscura. ¿Cómo puedo colorear el fondo para que sea el mismo que el estado activado y que la burbuja de la ondulación sea del color que le dije que fuera?


Es mucho más fácil de hacer con los estilos:

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


Puede controlar el color de RippleDrawable haciendo lo siguiente:

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);

O, a través de 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>

EDITAR

Después de ver la respuesta de @I.shadrin a continuación, debo admitir que es un enfoque mucho más simple (usar estilos). Si esta es una opción para ti, la recomendaría.


Si está utilizando el color del botón personalizado, utilice el código siguiente para el efecto dominó. Guarde el archivo en dibujable con el nombre my_ripple.xml y configúrelo en el fondo del botón.

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too`enter code here`ls="http://schemas.android.com/tools" android:color="@color/ripple_color" tools:targetApi="lollipop"> <item android:id="@android:id/mask"> <shape android:shape="rectangle"> <solid android:color="@color/ripple_color" /> </shape> </item> <item android:id="@android:id/background" android:drawable="@color/button_color" /> </ripple>


Un rizado de ejemplo para usar con un selector en api lvl 21 y superior

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


agregue estas dos líneas de código dentro de su vista para dar un efecto dominó.

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